2012-02-13 30 views
0

ここでのユースケースは、AutoPostBackがtrueに設定されているページの他の項目を更新するドロップダウンリストです。ただし、同じドロップダウンリストは、送信ボタンがクリックされたときにValidationGroupの必須項目の一部です。CausesValidationがデフォルトでfalseであっても、DropDownListでASP.NET ValidatorOnChangeが発生します。

私たちが直面している問題は、ドロップダウンリストが変更されると、ValidatorOnChangeがトリガされるため、ポストバックがページを更新する前にエラーが短時間表示されることです。

私たちがやろうとしている修正は、ドロップダウンリストのValidatorOnChange関数を削除することですが、これは奇妙なハックのように思えるので、他の提案があるかどうか疑問に思っています。

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 

    private void OnChange(object sender, EventArgs e) 
    { 
     updateList.Visible = test.SelectedValue == "1"; 
     updateList2.Visible = test.SelectedValue == "2"; 
    } 

    private void OnSubmit(object sender, EventArgs e) 
    { 
     if (Page.IsValid) 
     { 

     } 
    } 

</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:DropDownList runat="server" ID="test" AutoPostBack="true" OnSelectedIndexChanged="OnChange"> 
      <asp:ListItem Text="Test" Value="-1" /> 
      <asp:ListItem Text="Test 1" Value="1" /> 
      <asp:ListItem Text="Test 2" Value="2" /> 
      <asp:ListItem Text="Test 3" Value="3" /> 
     </asp:DropDownList> 
     <asp:RequiredFieldValidator ID="DropDownListValidator2" runat="server" ControlToValidate="test" 
      ErrorMessage="Please select" InitialValue="-1" ValidationGroup="testGroup" /> 
     <asp:DropDownList runat="server" ID="updateList" Visible="false" /> 
     <asp:DropDownList runat="server" ID="updateList2" Visible="false" /> 
     <asp:Button runat="server" ID="testSubmit" Text="Submit" ValidationGroup="testGroup" 
      OnClick="OnSubmit" /> 
    </div> 
    </form> 
</body> 
</html> 
+0

ののonchangeクライアント側イベントに変更ハンドラをバインドしますが、また同じ – Devjosh

+0

のためのマークアップを貼り付けることができますちょうどCausesValidationがデフォルトで真であるかもしれないという疑問がある場合には、ここではMSDNのドキュメントで、CausesValidationはデフォルトですべてのListControlでfalseになっています。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.causesvalidation.aspx – BlueFox

答えて

0

次jqueryのスクリプトブロックがあなたのために働く必要があります。

は、ここで問題を示すことは非常に単純なリストです。ドロップダウンリストから項目を選択するときValidatorEnable()を使用して検証を無効にするトリックに

を行いますここで私は、DropDownListコントロール

$("#<%=test.ClientID %>").change(function(){ 
    ValidatorEnable(DropDownListValidator2, false); 

}); 
+0

コードをお寄せいただきありがとうございますが、実際に検証が完全に無効になり、エラー通知が 'ボタンを押すと表示されません。 RequiredFieldValidatorで設定されたInitialValueに基づいて無効/有効にする特別なケースである必要があります。しかし、これがコントロールから単にValidatorOnChangeイベントハンドラを削除するよりも良いのかどうかはわかりません。 – BlueFox

+0

@bluefoxあなたはそれをテストしましたか?ボタンをクリックするのではなく、ドロップダウン・チェンジ・ハンドラをスクリプトにバインドしただけなので、送信ボタンからではなく、ドロップダウンリストからポストバックを行うときの検証が無効になります。あなたが最初のオプションだけが選択され、それがボタンをクリックするとすぐに起動するときに検証を実行したことに注意してください。 – Devjosh

+0

これは私の心に来たものです。クライアント側でこれを行う方法は他にはないと思うAFAIK – Devjosh

関連する問題