【问题标题】:Not getting Validation Erros while applying Validation Attribute on ViewModel在 ViewModel 上应用验证属性时未收到验证错误
【发布时间】:2012-06-15 12:50:45
【问题描述】:

我有一个视图模型

    [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");
 }
  }
}

现在我正在检查我的类对象的某些字段,如果验证失败我正在检查控制器中的模型状态并返回视图,为发票编号添加了验证消息但仍然没有收到错误

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

【问题讨论】:

    标签: asp.net-mvc-3 custom-attributes customvalidator


    【解决方案1】:

    使用

    <%= this.Html.ValidationSummary() %>
    

    @this.Html.ValidationSummary()
    

    你会得到你想要的。

    如果你的模型状态无效,你会得到你正在寻找的错误。

    你的问题是你的错误是你的错误没有与班级的任何成员相关联。在模型状态中,它具有键“”,因为它没有与任何字段关联。

    【讨论】:

    • +1,你是怎么解决的? IE。确保 IsValid 与验证字段相关联?我只是缺少一个构造函数吗?
    • 我不太明白你的意思。如果要验证字段,请使用 ModelState.IsValidField("field")
    • 我只是好奇为什么@this.Html.ValidationSummary() 显示模型错误而@Html.ValidationSummary() 没有?
    • 你是认真的还是讽刺的? this 关键字是我从使用 fxcop 和 stylecop 得到的一个旧习惯。它强制对实例使用 this 的原因是它允许其他开发人员立即识别成员是静态成员还是来自实例。可以提出关于不在视图中使用 this 的论点,因为每个人都知道 Html 是一个实例成员。显然两者都有效,因为它们是相同的。这和以前的问题不一样了。
    【解决方案2】:

    也许您忘记在视图上放置验证摘要?

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

    请提交您的观点以供审核。同时,这里是它工作的好例子: Validation with the Data Annotation Validators (C#)

    Model validation from Scott's blog

    看这里的教程handling model error,但是使用一个空字符串作为键:

    ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");
    

    错误消息将按您的预期显示在 中。

    【讨论】:

    • 我在视图上使用验证摘要,一切正常,模型没有更新,但我没有收到验证消息,我正在正确获取视图
    • 可能您以不同的方式处理它。你在使用 ModelState.AddModelError(string key, string errorMessage) 吗?另请查看我的答案中的一些额外信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多