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

Asp.net 如何在MVC中进行多字段验证?,asp.net,asp.net-mvc,validation,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-valms

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


使用ViewModel,并在提交/聚焦输出时进行验证。

要在服务器端(请求绑定到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" }
               );
        }
    }
}
使用System.ComponentModel.DataAnnotations;
公共类MyViewModel:IValidatableObject{
//请注意,这里没有[Required]属性,
//或者,如果未设置一个属性,我们将显示两条验证消息
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext){
if(string.IsNullOrWhiteSpace(FirstName)|
string.IsNullOrWhiteSpace(LastName)){
返回新的ValidationResult(
“名字和姓氏都是必需的!”,
新[]{“FirstName”,“LastName”}
);
}
}
}
此验证方法生成的消息可以使用
@Html.ValidationSummary()
呈现。它将在往返验证失败的服务器后显示

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


也许表达性注释会有帮助(),至少使用
jquery.validate.unobtrusive.js进行客户端验证是不行的,除非使用
RemoteAttribute
检查服务器上的某些内容。但是,您将它们一起验证是什么意思呢?我不想显示两条验证消息(每个文本框一条),我只想显示一条消息。然后您需要创建一个应用于
LastName
的自定义验证属性,该属性还验证
FirstName
是否为
null
。有关创建自定义验证属性的良好指南,请参阅