4

ドロップダウンリストを検証するために必要なフィールドバリデーターがあります。このドロップダウンリストは自動ポストバックで、causevalidation プロパティは false に設定されています。

問題は、デフォルトのアイテムを選択すると、検証メッセージが表示されますが、それでもポストバックが行われることです。そして、ポストバックの後、メッセージは消えます。

コードのスニペットは次のとおりです。

<asp:RequiredFieldValidator ID="ContactMethodRequired" runat="server" ControlToValidate="ContactPreferences"
            Display="Dynamic" ErrorMessage="Please choose your contact method"
            EnableClientScript="true" InitialValue=""></asp:RequiredFieldValidator>
        <div>
            <asp:DropDownList ID="ContactPreferences" runat="server" AutoPostBack="true" CausesValidation="false">
                <asp:ListItem Text="Select" Value="" Selected="True"></asp:ListItem>                         
                <asp:ListItem Text="Email" Value="Email"></asp:ListItem>
                <asp:ListItem Text="Phone" Value="Phone"></asp:ListItem>
            </asp:DropDownList>
        </div>
4

3 に答える 3

0

HTML要素のonchangeイベントでWebForm_DoPostBackWithOptionsメソッド呼び出し、または__doPostBackメソッド呼び出しが表示されますか?前者は、ポストバックを実行する前にPage_ClientValidate()を呼び出します。JSデバッグツールを使用して、そのパスを確認できます。また、デフォルトの検証グループなので、他の何かがそれをトリガーしている可能性がありますか?

于 2010-12-24T04:53:10.363 に答える
0
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title> 
<script type="text/javascript" language="javascript" >
 function ValidPage() 
    {                             
       if (typeof(Page_ClientValidate) == 'function')  
       { 
            if (typeof (Page_ClientValidate) == 'function') { Page_ClientValidate();     }  
            if (!Page_IsValid) 
            {           

                return false;
            }                  
            return Page_IsValid; 
      } 
      return true;  
    } 

</script>
</head>
<body >
    <form id="form1" runat="server"  onsubmit="return ValidPage();"  >

        <div> 
            <asp:DropDownList ID="ContactPreferences" runat="server"       AutoPostBack="true"  CausesValidation="false"> 
                <asp:ListItem Text="Select" Value="" Selected="True"></asp:ListItem>  
                <asp:ListItem Text="Email" Value="Email" ></asp:ListItem> 
                <asp:ListItem Text="Phone" Value="Phone"></asp:ListItem> 
            </asp:DropDownList> 


            <asp:RequiredFieldValidator    ID="RequiredFieldValidator1" runat="server" ControlToValidate="ContactPreferences" 
            Display="Dynamic" ErrorMessage="Please choose your contact method" 
            EnableClientScript="true" InitialValue=""></asp:RequiredFieldValidator> 

        </div> 

    </form>
</body>
</html>
于 2010-12-08T22:28:55.087 に答える
0

どういうわけか、バリデーターはここで何かを混乱させています。この動作を防ぐには、さまざまな方法があります。

1) 設定できます

EnableClientScript="false"

つまり、サーバー上で検証します。

これに望ましくない副作用がある場合 (バリデーターが他のクライアントバリデーターに「追い越される」ため)、これを行うことができます

2) この javascript/jquery-function をページに追加します。

function HideValidator() {

     var validator = $('#<%= ContactMethodRequired.ClientID %>');
     validator.hide();
}

および ddl へのイベント ハンドラ:

onchange="HideValidator();"
于 2012-07-04T11:05:13.750 に答える