4

変更時にサーバーにポストバックし、2番目のドロップダウンリストにいくつかの日付を入力するドロップダウンリストを含むasp.netフォームがあります。

フォームには他のフィールドも含まれており、その一部はクライアント側とサーバー側で検証されています。

これが私が抱えている問題です。クライアント側の検証エラーが発生した後、ドロップダウンリストを変更しようとすると、2番目のドロップダウンにデータが入力されません。その後、最初のドロップダウンリストを再度変更すると、期待どおりに機能します。

これが私の送信ボタンです:

<asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClientClick="Page_ClientValidate(); return checkPassengers();" OnClick="Page_Transfer" ValidationGroup="FormSubmit" />

これが私のクライアントサイド検証です:

function checkPassengers() {
    if($("#testField").val() == "Name *" || $("#testField").val() == "") {
            $("#pltester").prepend("<p class='fillall'>Please fill in all fields marked with *</p>");
            return false;       
    }
};

ドロップダウン:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddl1st" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
        <asp:DropDownList ID="ddl1st" Width="190" AutoPostBack="true" OnSelectedIndexChanged="ChooseDates1st" runat="server" />
        <asp:DropDownList ID="ddlDepart1st" AutoPostBack="true" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>
4

4 に答える 4

4

updatepanelを使用する前に、この問題に何度も遭遇しました。

フィールドを検証する必要がある場合は、実際にCausesValidation="true"要素を設定して、更新パネルで機能するようにする必要があることがわかりました。

これがお役に立てば幸いです。

于 2012-04-20T11:26:54.857 に答える
4

設定するだけでCausesValidation="true"は問題は解決しませんでした。これは、aspドロップダウンリストのSelectedIndexChangeイベントを使用するときに問題になるようです。私が見つけた回避策は、ポストバックの前に存在しない検証グループ名を検証することにより、jsを使用してフロントエンドの検証をリセットすることでした。

function ignoreValidation() {
            if (typeof Page_ClientValidate != 'undefined') {
                Page_ClientValidate('reset-validation');
                Page_BlockSubmit = false;
            }
            return true;
}

そしてドロップダウンリストのために

<asp:DropDownList CausesValidation="false" onchange="ignoreValidation();" runat="server" ID="CustomerDropDownList" OnSelectedIndexChanged="LoadCustomers" AutoPostBack="true"/>

于 2015-02-04T18:25:04.343 に答える
1

ドロップダウンリストを検証する必要がない場合はCausesValidation="false"、最初のドロップダウンリストに設定できます。これにより、検証がトリガーされないため、自由に変更できます。

または、DropDownListを別のValidationGroupに配置して、変更しても他のコントロールの検証がトリガーされないようにすることもできます。

于 2012-04-19T16:47:35.243 に答える
0
function validateCommand(group) {
        if (typeof (Page_ClientValidate) == 'function') {
            Page_ClientValidate(group);
            if (Page_IsValid) {
                Page_BlockSubmit = !confirm('Are you sure?');
            }
        }
    }
于 2013-04-05T08:30:36.317 に答える