2016-09-29 115 views
1

我需要對文本框和下拉菜單執行驗證,只有當這兩個值都爲空時纔會觸發,並且在其中一個值爲空時不執行任何操作。我將如何實現它?我是否需要創建自定義驗證器?下面是我的模型和視圖 型號ASP MVC驗證

public class CustomValidators 
{ 
    [Required] 
    [Required(ErrorMessage = "State Required")] 
    public string drpStateId { set; get; } 

    public System.Web.Mvc.SelectList drpState { set; get; } 
    [Required(ErrorMessage ="Region Required")] 
    public string txtRegion { set; get; } 
} 

查看

@model InterviewTest.Models.CustomValidators 

@{ 
    ViewBag.Title = "Custom Validator"; 
    Layout = "~/Views/_Layout.cshtml"; 
} 

<p>@Html.ActionLink("< Back", "Index")</p> 

@using (Html.BeginForm("CustomValidatorPost")) 
{ 
    @Html.ValidationSummary() 
    <div class="container-fluid"> 
     <div class="row"> 
      <div class="col-sm-3"> 
       <div class="form-group"> 
        @Html.DropDownListFor(c => c.drpStateId, Model.drpState, "", new { @class = "form-control" }) 
       </div> 
      </div> 

      <div class="col-sm-6"> 
       <div class="form-group"> 
        @Html.TextBoxFor(x => Model.txtRegion, new { @class = "form-control" }) 
        @*<input type="text" id="txtRegion" name="txtRegion" class="form-control" />*@ 
       </div> 
      </div> 

      <div class="col-sm-3"> 
       <button type="submit" name="btnSubmit" id="btnSubmit" class="btn btn-default">Submit</button> 
      </div> 
     </div> 
    </div> 
} 
+1

考慮一個適用於您的txtRegio的[foolproof](http://foolproof.codeplex.com/)'[RequiredIfNotEmpty(「drpStateId」)]'屬性n'屬性(和類似的應用於'drpStateId'屬性,並刪除'[Required]'屬性) –

+0

@StephenMuecke當我試圖提交作品時,兩者都是空的 – aj12

+1

對不起,誤解了你的要求。爲此,您需要編寫自己的自定義驗證屬性 - [ASP.NET MVC 3中的驗證完整指南 - 第2部分](http://www.devtrends.co.uk/blog/the-complete-引導到驗證功能於asp.net-MVC -3-部分-2) –

回答

0

沒有開箱驗證,關於2場作品除了比較驗證的,所以你的情況你必須創建一個自定義驗證。

您可以創建一個JavaScript函數並在onchange這兩個文本框上觸發它,並在其中檢查值,如果兩者都爲空,則顯示錯誤消息並阻止提交表單,則可以使用通過添加自定義驗證程序進行JQuery驗證,請參閱此鏈接以獲取更多詳細信息https://jqueryvalidation.org/jQuery.validator.addMethod/

在服務器端,您可以在控制器操作中執行一個簡單的if語句來驗證這兩個值是否都爲空,如果兩者都爲空,將錯誤添加到ModelState