我正在使用Data Annotation
进行服务器端验证,并从客户端将数据发送到控制器,然后从ModelState
我尝试获取ErrorMessage
。
我的代码。
[Required(ErrorMessage = "Order ID cannot be null")]
[Range(0, int.MaxValue, ErrorMessage = "OrderID must be greater than 0.")]
public int OrderID
{
get;
set;
}
[Required]//(ErrorMessage = "Customer ID cannot be null")]
[StringLength(5, ErrorMessage = "CustomerID must be 5 characters.")]
public string CustomerID
{
get;
set;
}
我的控制器代码
public ActionResult Validate(EditableOrder order)
{
if (!ModelState.IsValid)
{
List<string> errorlist = new List<string>();
foreach (ModelState modelState in ModelState.Values)
{
foreach (ModelError error in modelState.Errors)
{
errorlist.Add(error.ErrorMessage);
}
}
return Content(new JavaScriptSerializer().Serialize(errorlist));
}
return Content("true");
}
我的脚本代码。
var record = args.data;
$.ajax({
url: "/Inlineform/Validate",
type: "POST",
data: record,
success: function (data) {
var errorlist = JSON.parse(data);
var i;
if (errorlist.length)
{
args.cancel = true;
var str="";
$.each(errorlist,function(index,error){
str+="<tr><td>"+error+"</td></tr>";
});
$("#ErrorList").html("<table>"+str+"</table>");
}
}
当对Validate
操作发出请求时,我可以将其与EditableOrder
绑定,而在ModelState中我只能获得ErrorMessage
的{{1}}而不是Required
{1}}或Range
。
这里出了什么问题?
感谢。
答案 0 :(得分:0)
要使验证对MVC2有效,您必须将以下代码放在包含需要验证的字段的页面上:
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
...
@Html.EnableClientValidation();
此外,使用StringLength将不适用于最小长度。 MVC中StringLength的默认适配器是:
public class StringLengthAttributeAdapter : DataAnnotationsModelValidator<StringLengthAttribute>
{
public StringLengthAttributeAdapter(ModelMetadata metadata, ControllerContext context, StringLengthAttribute attribute): base(metadata, context, attribute)
{}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
return new[] { new ModelClientValidationStringLengthRule(ErrorMessage, 0, Attribute.MaximumLength) };
}
}
在撰写此代码时,有人在微软休息了一天。
您可以使用以下方法覆盖StringLength适配器以使其正常运行:
public class StringLengthAttributeAdapter : DataAnnotationsModelValidator<StringLengthAttribute>
{
public StringLengthAttributeAdapter(ModelMetadata metadata, ControllerContext context, StringLengthAttribute attribute): base(metadata, context, attribute)
{}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
return new[] { new ModelClientValidationStringLengthRule(ErrorMessage, Attribute.MinimumLength, Attribute.MaximumLength) };
}
}
最后,将此代码放入global.asax.cs文件中:
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(StringLengthAttribute), typeof(MVCWebPractice.Models.StringLengthAttributeAdapter));
这解决了StringLength的问题。您不需要创建任何客户端javascript来实现任何此类。
要在特定部分打印错误摘要,请将其放在视图上的适当位置:
<%: Html.ValidationSummary(false) %>
您需要将标志设置为false以显示与属性值相关的错误。我假设这是您尝试使用自定义JavaScript代码。
我希望这会有所帮助。