2011-12-09 51 views
1

我想從瀏覽器中禁用asp.net驗證服務器控件。我在網上查過,但沒有找到任何方法來禁用服務器端驗證;它只能在客戶端使用JS/jQuery來禁用。如何從瀏覽器禁用asp.net web表單上的服務器端驗證?

這裏是場景:我有一個複選框,並選擇顯示一組文本框。只有當複選框被選中時,所需的字段驗證器纔會爲文本框啓動。我不想在複選框上調用回發。實際上,這些chceck盒子將使用jQuery模板生成,所以回發不是啓用禁用驗證的選項。

我想知道是否有任何方法可以使用某些設置禁用瀏覽器控件的.CausesValidation屬性?或者有什麼方法可以捕獲在page_load之前的某些事件中要考慮進行驗證的控件?

[更新] 基於公認的答案,這裏是我的解決方案:

<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="textbox1" runat="server"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="req1" ControlToValidate="textbox1" runat="server" 
     ErrorMessage="enter text"></asp:RequiredFieldValidator> 
    <asp:TextBox ID="textbox2" runat="server"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="req2" ControlToValidate="textbox2" runat="server" 
     ErrorMessage="enter text for 2"></asp:RequiredFieldValidator> 
    <asp:CheckBox ID="check1" runat="server" Text="choose" /> 
    <asp:Button ID="submitBtn" runat="server" OnClick="submitBtn_Click" Text="submit" /> 
    <asp:CustomValidator ID="cvBox" runat="server" ErrorMessage="Error" ValidationGroup="prueba" 
     OnServerValidate="Validarcaja"></asp:CustomValidator> 
    <asp:ValidationSummary ID="summary" runat="server" /> 
</div> 
</form> 



protected void Page_Load(object sender, EventArgs e) 
{ 
    req1.Enabled = false; 
    req2.Enabled = false; 
} 
protected void submitBtn_Click(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     Page.Validate(); 
     if (Page.IsValid) 
     { 
      Response.Write("valid form"); 
     } 
     else 
     { 
      Response.Write("invalid form"); 
     } 
    } 
} 
protected void Validarcaja(object source, ServerValidateEventArgs args) 
{ 
    if (check1.Checked) 
    { 
     req1.Enabled = true; 
     req1.Validate(); 

    } 
} 

回答

0

對我來說,解決辦法是使用的CustomValidator與OnServerValidate方法。

在OnServerValidate方法中,我會檢查複選框是否被選中,在這種情況下,我會驗證文本框是否被填充。不需要在CausesValidation屬性中進行任何更改。 唯一的條件是不包括屬性「ControlToValidate」。如果文本框爲空,CustomValidator不會觸發,這就是原因。 因此,代碼會是這樣:

<asp:ValidationSummary ID="vs" runat="server" ValidationGroup="prueba" /> 
    <asp:CheckBox ID="chb" runat="server" Text="Check" /> 
    <asp:TextBox ID="txbBox" runat="server"></asp:TextBox>  
    <asp:CustomValidator ID="cvBox" runat="server" ErrorMessage="Error" ValidationGroup="prueba" 
    OnServerValidate="Validarcaja"></asp:CustomValidator> 
    <asp:Button ID="btn" runat="server" Text="Prueba" /> 

而隱藏代碼:

 protected void Page_Load(object sender, EventArgs e) 
      { 
if (IsPostBack) 
      { 
       Page.Validate(); 
      } 
      } 

      protected void Validarcaja(object source, ServerValidateEventArgs args) 
      { 
       if (chb.Checked) 
       { 
        if (txbBox.Text == String.Empty) 
        { 
         cvBox.IsValid = false;      
        } 

       } 
      } 
+0

感謝@netadictos .. :) – Amit

+0

@Amit驗證的良好鏈,;-) – netadictos