2017-06-06 47 views
1

我可以通過使用data-val true來單獨驗證每個文本框,但我怎麼能做多字段驗證?我想一起驗證名字和姓氏。兩個字段都是必需的。我使用GUID生成一個唯一的ID,以便將值傳遞給控制器​​。如何在MVC中進行多字段驗證?

<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> 
+0

也許表現註釋可以幫助(https://github.com/jwaliszko/ExpressiveAnnotations) – Simon

+0

你不能,至少使用客戶端驗證使用'jquery.validate.unobtrusive.js'除非使用'RemoteAttribute'來檢查服務器上的東西。但你是什麼意思_一起驗證他們_? –

+0

而不是顯示兩個驗證消息(每個文本框一個),我只想顯示一條消息。 – Ram

回答

1

要在服務器端驗證(在當該請求被綁定到視圖模型的時間),實現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

0

使用ViewModel,並在submit/focusOut上進行驗證。