嗨,我第一次使用 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 });
}
}
}
}