我可以使用属性和ModelState.AddModelError来验证asp.net mvc中的模型属性吗?

时间:2013-01-23 16:41:56

标签: asp.net asp.net-mvc asp.net-mvc-3 validation

在我的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吗?

2 个答案:

答案 0 :(得分:1)

至于为什么你的实现不起作用,这是因为AddModelError的第一个参数应该是你的属性的完全限定路径,这是基于强类型View的类型。在您的情况下,我相信它将是“CurrentItem.Product.Name”

我建议使用Fluent验证库。它允许您编写自定义验证并为您处理添加到ModelState。这是很不错的。

流利验证:http://fluentvalidation.codeplex.com/

答案 1 :(得分:1)

您可以通过添加StringLength属性来实现相同的目标:

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)]

100是最大长度,3是最小长度。