Asp.net 如何在MVC中进行多字段验证?
我可以使用data val true单独验证每个文本框,但如何进行多字段验证?我想同时验证名字和姓氏。这两个字段都是必填字段。我正在使用guid生成一个唯一的id,以便将值传递给控制器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
<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
。有关创建自定义验证属性的良好指南,请参阅