2011-12-09 53 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