0

在我的 asp.net mvc 3 项目中,我在需要验证的属性上使用 [Required] 属性。我还使用 ModelState.AddModelError 将错误添加到相同的属性(带有属性)。使用第二种方法添加的错误不会出现。可能是什么原因?

这是代码:

1) 有属性的属性

[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 吗?

4

2 回答 2

1

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

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

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

于 2013-01-23T16:46:45.823 回答
1

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

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

100最大长度和最小长度在哪里3

于 2013-01-23T16:48:39.350 回答