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

私のためのソリューションはOnServerValidate方法でのCustomValidatorを使用することです。

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

関連する問題