Asp.net mvc 3 在ViewModel上应用验证属性时未获得验证错误

Asp.net mvc 3 在ViewModel上应用验证属性时未获得验证错误,asp.net-mvc-3,custom-attributes,customvalidator,Asp.net Mvc 3,Custom Attributes,Customvalidator,我有一个视图模型 [CustomValidation(typeof(MyValidation), "MyMethod")] [Serializable()] public class TransactionViewModel { public string InvoiceNumber; } public class MyValidation { public static ValidationResult validatelength(T

我有一个视图模型

    [CustomValidation(typeof(MyValidation), "MyMethod")]
    [Serializable()]
    public class TransactionViewModel
   {
      public string InvoiceNumber;
   }

 public class MyValidation
{

  public static ValidationResult validatelength(TransactionViewModel length)
{

bool isValid;
 if (length.InvoiceNumber.Length >15)
isValid = false;
 else
isValid = true;
   if (isValid)
 {
    return ValidationResult.Success;
}
 else
 {
    return new ValidationResult(
      "The Field value is greater than 15");
 }
  }
}
现在我正在检查我的类对象的一些字段,如果验证失败,我正在检查控制器中的模型状态并返回视图,添加了发票号的验证消息,但仍然没有得到错误

我们能否将验证属性应用于模型视图,如果我做错了什么,请提供解决方案

使用

<%= this.Html.ValidationSummary() %>
你会得到你想要的

如果您的modelstate无效,您将得到要查找的错误


您的问题是您的错误是您的错误与该类的任何成员都没有关联。在modelstate中,它有键“”,因为它与任何字段都没有关联。

也许您忘记在视图中放置validationsummary了

<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

错误消息将如您所料出现在中。

我正在视图上使用验证摘要,一切正常,模型没有更新,但我没有收到验证消息,我得到的视图是正确的。可能您正在以不同的方式处理它。您是否正在使用ModelState.AddModelError(字符串键、字符串错误消息)?另外,请看我的回答中的一些额外信息。+1,你是如何解决的?即,确保IsValid与验证字段相关联?我是不是错过了一个构造器?我真的不明白你的意思。如果要验证字段,请使用ModelState.IsValidField(“字段”),我只是好奇为什么
@this.Html.ValidationSummary()
会显示一个模型错误,而as
@Html.ValidationSummary()
不会?你是认真的还是讽刺的?this关键字是我在fxcop和stylecop中使用的一个老习惯。它强制在实例中使用它的原因是,它允许其他开发人员立即识别成员是静态的还是来自实例的。在视图中不使用它可能会引起争论,因为每个人都知道Html是实例成员。显然这两种方法都有效,因为它们是相同的。这与以前的问题不同。
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>
ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");