【问题标题】:ASP.NET MVC Model validation error beside field字段旁边的 ASP.NET MVC 模型验证错误
【发布时间】:2014-12-29 23:33:38
【问题描述】:

我的代码中有一个基于此链接的自我验证模型: ASP.NET MVC: Custom Validation by DataAnnotation

public class TestModel : IValidatableObject
{
    public string Title { get; set; }
    public string Description { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (Title == null)
            yield return new ValidationResult("The title is mandatory.", new [] { "Title" });

        if (Description == null)
            yield return new ValidationResult("The description is mandatory.", new [] { "Description" });
    }
}

所有这些都运行良好。但我的问题是:上面的错误消息显示为 ValidationSummary 错误。有没有办法让标题错误消息显示在标题字段旁边(在表单视图上)和描述错误消息显示在描述字段旁边,就像在客户端验证中一样?

【问题讨论】:

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


    【解决方案1】:

    首先确保您在每个字段旁边添加了正确的剃刀标记,例如:

    @Html.ValidationMesageFor(m => m.Title)
    

    仅当与同一字段关联的 ModelState 中存在错误时才会显示错误消息,因此请确保 ModelState["Title"] 包含错误,否则您将看不到该消息。

    【讨论】:

      【解决方案2】:

      这一切至少是由 CSS 定制的,或者您可以随时使用 javascript (jquery)。

      更新

      好吧,我认为,这是相当少的信息,因此,尝试添加更多。基本上,您也可以使用 html.helper ValidationMessageFor + span 标签。例如:

      @Html.EditorFor(x=>x.ModelProperty)<span>@Html.ValidationMessageFor(x=>x.ModelProperty)</span>
      

      在你的魔法对象自我验证后的行动方法中,分析你的验证结果。
      只是粗略的演示:

      var result = myObject.Validate(someContext);  
      if (result != result.Success)
      { 
        ModelState.AddModelError("Title"); // if error in Title prop (otherwise "Description") 
        return View (myObject);
      }
      

      或者,如果您的模型通过 ValidationAttribute 进行验证,您可以通过 ModelState.IsValid 或 ModelState.IsValidField 方法进行检查。

      【讨论】:

        猜你喜欢
        • 2012-02-17
        • 2014-10-30
        • 1970-01-01
        • 1970-01-01
        • 2012-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多