Привет, я впервые использую xval, похоже, он отлично работает для обязательных полей, однако у меня есть некоторые проблемы, прежде всего, он не проверяет логические значения, а также проверка клиента не работает для меня, это не Основная проблема для меня, то, что мне действительно нужно для работы, - это свойство stringlength. Кажется, что-то происходит, потому что форма не отправляется, когда длина строки превышена, однако пользователю не отображается сообщение об ошибке, что, очевидно, не то, что я хочу, смог ли кто-нибудь сделать это успешно?
Моя модель выглядит так
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace PitchPortal.Core
{
public class DocumentMetadata
{
//[Required]
// public bool visibility { get; set; }
[Required,StringLength(10, ErrorMessage = "title is too long")]
public string title { get; set; }
[Required, StringLength(10, ErrorMessage = "description is too long")]
public string description { get; set; }
[Required, StringLength(10, ErrorMessage = "summary is too long")]
public string summary { get; set; }
}
}
HTML выглядит так
<div id="results" title="Upload results"/>
<form id="myForm" action="<%=Url.Action("New") %>" method="post" enctype="multipart/form-data">
<% Html.EnableClientValidation(); %>
<%= Html.ValidationSummary() %>
<table>
<tr>
<td> <%=Html.Label("File")%></td>
<td>
<input type="file" id="file1" name="fileUpload" /> <br />
<%=Html.SubmitButton<DocumentController>(x => x.Upload(), "GetImage", "")%>
</td>
<td>
<%=Html.ValidationMessage("file1")%>
</td>
</tr>
<tr>
<td> <%=Html.Label("Visible")%></td>
<td>
<%= Html.RadioButton( "visibility",true,true) %>true
<%= Html.RadioButton("visibility", false)%>false
</td>
<td>
<%= Html.ValidationMessage("visibility")%>
</td>
</tr>
<tr>
<td> <%=Html.Label("Title")%></td>
<td> <%=Html.TextBox("doc.title")%></td>
<td> <%= Html.ValidationMessage("doc.title")%></td>
</tr>
<tr>
<td> <%=Html.Label("Description")%></td>
<td><%= Html.TextArea("doc.description")%></td>
<td><%= Html.ValidationMessage("doc.description")%></td>
</tr>
<tr>
<td> <%=Html.Label("Summary")%></td>
<td> <%= Html.TextArea("doc.summary")%></td>
<td> <%= Html.ValidationMessage("doc.summary")%></td>
</tr>
<tr>
<td> <%=Html.Label("Filetype")%></td>
<td> <%= Html.DropDownList("Filetype_id", (IEnumerable<SelectListItem>)ViewData.Model.AllFiletypesList)%> </td>
<td> <%= Html.ValidationMessage("doc.Filetype_id")%> </td>
</tr>
<tr>
<td> <%=Html.Label("Category")%></td>
<td><%= Html.DropDownList("cat.parent_id", (IEnumerable<SelectListItem>)ViewData.Model.AllCategoriesList, "-please select item-", new { className = "unselected" })%> </td>
<td><%= Html.ValidationMessage("cat.parent_id")%> </td>
</tr>
<%
if (Session["TempFolder"] == null)
{
for (int i = 1; i < 6; i++)
{ %>
<tr>
<td> <%=Html.Label("Shot "+i.ToString()) %> </td>
<td><input type="file" id="image_<%= i.ToString() %>" name="image_<%= i.ToString() %>" /></td>
</tr>
<% }
}%>
<tr>
<td><input type="submit" value="save"/></td>
</tr>
</table>
</form>
</div>
Код для частичного класса здесь
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using System.Web;
using System.IO;
using System.Configuration;
using xVal.ServerSide;
using System.Web.Mvc;
using PitchPortal.Core.Repositories;
using System.Web.Script.Serialization;
using System.ComponentModel.DataAnnotations;
using PitchPortal.Core.Extensions;
namespace PitchPortal.Core
{
[MetadataType(typeof(DocumentMetadata))]
public partial class Document : IPostedFile
{
IRepository<FileType> IFiletypeRepository = new Repository<FileType>(new DataContextProvider(new ConnectionStringProvider(ConfigurationManager.AppSettings["ConnectionString"])));
static ILoggingService logger = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<ILoggingService>();
public int DownloadCounter
{
get
{
return this.Downloads1.Count;
}
}
[ScriptIgnore]
public bool IsNewDocument
{
get { return this.document_id<1; }
}
public string clientClassPath
{
get { return "DocumentVO"; }
}
public string VersionGuid
{
get;
set;
}
[ScriptIgnore]
public virtual HttpPostedFileBase PostedFile
{
get;
set;
}
[ScriptIgnore]
public string BasePath
{
get
{
return PathExtensions.Build(new string[] { ConfigurationManager.AppSettings["Root"], Category1.GetFamilyTreePath(), title });
}
}
}
}