在我的asp.net mvc 3项目中,我在需要验证的属性上使用[Required]属性。我还使用ModelState.AddModelError将错误添加到相同的属性(带属性)。第二种方法添加的错误没有显示出来。可能是什么原因?
以下是代码:
1)具有attibute的财产
[Required(ErrorMessage = "Product name is required")]
public string Name { get; set; }
2)在控制器动作方法
中if (p.Name.Length < 3)
ModelState.AddModelError("Name",
"Product name should be at least 3 characters long");
3)在视图中
@Html.EditorFor(i => i.CurrentItem.Product.Name)
Html.ValidationMessageFor(i => i.CurrentItem.Product.Name)
@Html.ValidationMessage("Name")
那么,mabby我不能同时使用属性和ModelState吗?
答案 0 :(得分:1)
至于为什么你的实现不起作用,这是因为AddModelError的第一个参数应该是你的属性的完全限定路径,这是基于强类型View的类型。在您的情况下,我相信它将是“CurrentItem.Product.Name”
我建议使用Fluent验证库。它允许您编写自定义验证并为您处理添加到ModelState。这是很不错的。
答案 1 :(得分:1)
您可以通过添加StringLength
属性来实现相同的目标:
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)]
100
是最大长度,3
是最小长度。