2013-05-07 75 views
0

我希望當文本框爲visible = false時,RequiredFieldValidator不應該運行。RequiredFieldValidator IsValid在visible = false控制上返回false

這是我的aspx代碼:

<asp:TextBox runat="server" ID="txtAmt" MaxLength="7" Style="width: 100px;"/> 
        <asp:RequiredFieldValidator ValidationGroup="ln" runat="server" ControlToValidate="txtAmt" 
         Display="Dynamic" ErrorMessage="Required" /> 

現在在我後面的代碼

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      txtAmt.Visible = false; 
     } 
    } 
在我的按鈕單擊處理

,然而,當我做了Page.IsValid,它返回false如果文本框爲空。任何想法如何解決這個問題?

回答

3

只需向驗證程序分配一個ID並將其禁用即可。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      txtAmt.Visible = false; 

     if(!txtAmt.visible) { txtamtValidator.Enabled=false}; 

     } 
    } 
+0

我想這是一個黑客,因爲如果控制的可見性是虛假按照該鏈接Page.IsValid應返回true:http://stackoverflow.com/問題/ 2962280/do-validations-still-fire-in-asp-net-even-if-the-controls-are-hidden我認爲這個錯誤的原因還沒有找到。 – Jack 2013-05-07 06:12:19

+0

你可以嘗試禁用validatorID,或者只是讓它們都可見= false,控件和驗證器,以便它們不會被渲染 – 2013-05-07 06:21:07

+0

好主意。謝謝! – Jack 2013-05-07 06:39:58

0

使用JavaScript就可以實現這一目標

<script type="text/javascript"> 
     function txtAmtOff() 
     { 
      document.getElementById("txtAmt").style.display = 'none'; 
      ValidatorEnable(document.getElementById("txtAmtValidator"), false); 
     } 
     function txtAmtOn() 
     { 
      document.getElementById("txtAmt").style.display = 'inline'; 
      ValidatorEnable(document.getElementById("txtAmtValidator"), true); 
     } 
    </script>