2013-04-10 31 views
2

需要兩個字段我有2個字段:一在驗證

名字

而且只需要其中的一個。但是,如果兩者都被省略,我希望兩個字段都被突出顯示。如果其中一個填寫了,那麼模型沒問題,表單應該提交。

這怎麼辦?

回答

3

您可以使用this library,它會幫你做這樣的事情

[RequiredIf("PropertyValidationDependsOn", true)] 
    public string PropertyToValidate { get; set; } 
+0

上測試它可以在沒有庫的情況下完成嗎? – raklos 2013-04-10 17:10:34

+0

它可以是如果你寫自己的驗證屬性,這是相對簡單的。像上面這樣的東西,或者FoolProof Validation http://foolproof.codeplex.com/或Fluent Validation http://fluentvalidation.codeplex.com/都可以滿足這個需求。 – 2013-04-10 17:15:09

2

所有複雜的驗證與您的視圖模型從繼承IValidatableObject開始。然後,您覆蓋驗證並放入您自己的驗證規則。

IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) 
{ 
    if (String.IsNullOrWhiteSpace(FirstName) && String.IsNullOrWhiteSpace(LastName)) 
    { 
     yield return new ValidationResult("A name must be entered.", new string[] { "FirstName", "LastName" }); 
    } 
} 

請注意,這隻能確保服務器端驗證此規則。如果你想要它的客戶端,你需要編寫自己的JavaScript/jQuery代碼來處理驗證。

+0

這個標記的字段無效的方式與正常的驗證屬性一樣嗎? – raklos 2013-04-15 17:00:10

+0

是的。 'new string [] {「FirstName」,「LastName」}'參數告訴調用代碼哪個字段驗證失敗。 – 2013-04-15 17:06:54

2

如果你願意做這個客戶端 這可能會給你一個開始

HTML

<input type="text" class="name" id="firstName" /> 
<input type="text" class="name" id="lastName" /> 
<input type="button" id="btnSubmit" value="submit" /> 

按鈕單擊事件

$("#btnSubmit").click(function() { 
    var isValid = false; 
    $("input[class='name']").each(function (key, keyValue) { 
     //alert(keyValue.value); 
     if (keyValue.value.length > 0) { 
      isValid = true; 
      $(this).css("background", "White"); 
     } 
     else { 
      $(this).css("background", "RED"); 
     } 
    }) 
    if (!isValid) { 
     // do something 
    } 
}); 

爲了防止表單提交,如果不通過驗證

$('input[type=submit]').bind('click', function(e) { 
    var isValid = false; 
     $("input[class='name']").each(function (key, keyValue) { 
      //alert(keyValue.value); 
      if (keyValue.value.length > 0) { 
       isValid = true; 
       $(this).css("background", "White"); 
      } 
      else { 
       $(this).css("background", "RED"); 
      } 
     }) 
     if (!isValid) { 
      e.preventDefault() // prevents the form from being submitted 
     }  
}); 

http://jsfiddle.net/habo/UpmCv/