如何在MVC中进行多字段验证?

时间:2017-06-06 12:28:08

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

我可以使用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>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用ViewModel,并在submit / focusOut上验证。