【问题标题】:How to do multifield validation in MVC?如何在 MVC 中进行多字段验证?
【发布时间】:2017-06-06 12:28:08
【问题描述】:

我可以通过使用 data-val true 来分别验证每个文本框,但是如何进行多字段验证呢?我想一起验证名字和姓氏。这两个字段都是必需的。我正在使用 guid 生成一个唯一的 id,以便将值传递给控制器​​。

<input type="text" data-val="true" data-val-required="This field is required." name="FormResponse.NameResponse[@guid].FirstName" />
<span data-valmsg-for="FormResponse.NameResponse[@guid].FirstName" data-valmsg-replace="true"></span>

<input type="text" data-val="true" data-val-required="This field is required." name="FormResponse.NameResponse[@guid].LastName" />
<span data-valmsg-for="FormResponse.NameResponse[@guid].LastName" data-valmsg-replace="true"></span>

【问题讨论】:

  • 表达性注释可能会有所帮助 (github.com/jwaliszko/ExpressiveAnnotations)
  • 您不能,至少使用jquery.validate.unobtrusive.js 使用客户端验证,除非您使用RemoteAttribute 在服务器上检查某些内容。但是你是什么意思一起验证它们
  • 我不想显示两条验证消息(每个文本框一个),而是只显示一条消息。
  • 然后您需要创建一个应用于LastName 的自定义验证属性,它还验证FirstName 不是null。请参阅 The Complete Guide To Validation In ASP.NET MVC 3 - Part 2 以获得创建自定义验证属性的良好指南

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


【解决方案1】:

要在服务器端进行验证(在请求绑定到 ViewModel 时),实现IValidatableObject

using System.ComponentModel.DataAnnotations;

public class MyViewModel : IValidatableObject {

    // note that we do not have a [Required] attribute here, 
    // or we would show two validation messages if one property is not set
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
        if (string.IsNullOrWhiteSpace(FirstName) || 
            string.IsNullOrWhiteSpace(LastName)) {
                yield return new ValidationResult(
                  "Both first and last name are required!",
                   new[] { "FirstName", "LastName" }
               );
        }
    }
}

此验证方法生成的消息可以使用@Html.ValidationSummary() 呈现。它将在往返验证失败的服务器后显示。

您可以通过调用ModelState.IsValid来测试模型在控制器中是否有效。

ASP.NET MVC: Self Validating Model objects

【讨论】:

    【解决方案2】:

    使用 ViewModel 并在 submit/focusOut 时验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      相关资源
      最近更新 更多