1

現在、2 つのテキスト ボックスと送信ボタンを持つフォームがあります。2 つのテキスト ボックスで jquery 検証を使用していますが、asp.net UpdatePanel を使用して AJAX を使用してサーバーにデータを送信しているため、検証で問題が発生しています。

何が起こっているかというと、次のコードを使用して検証を機能させることができます。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Register.ascx.cs" Inherits="CapcoControls.Register" %>
<div id="register">    
    <form id="Form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnSubmit" EventName="Click" />
        </Triggers>
        <ContentTemplate>
        <asp:Panel id="pnlWrapper" ClientIDMode="Static" runat="server">
            <asp:TextBox ID="txtName" runat="server" MaxLength="200" TabIndex="1" ClientIDMode="Static" title="NAME"></asp:TextBox>
            <asp:TextBox ID="txtEmail" runat="server" MaxLength="200" TabIndex="2" ClientIDMode="Static" title="EMAIL ADDRESS"></asp:TextBox>
            <asp:ImageButton ID="btnSubmit" runat="server" 
                ImageUrl="~/images/btn_submit.png" ClientIDMode="Static" 
                onclick="btnSubmit_Click" TabIndex="3" />
        </asp:Panel>
        </ContentTemplate>        
    </asp:UpdatePanel>
    </form>
</div>
<script type="text/javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequestHandler);

    function initializeRequestHandler(sender, args) {
        if (args.get_postBackElement().id == '<%= btnSubmit.ClientID %>' && $("#Form1").valid() !== true) {
             args.set_cancel(true);
         }
     }

    $(document).ready(function () {
        $("#Form1").validate({            
            rules: {
                <%= txtName.UniqueID %>: {
                    required: true,
                    checkDefaultValue: true
                },                
                <%= txtEmail.UniqueID %>: {
                    required: true,
                    email: true,
                    checkDefaultValue: true
                }
            },
            messages: { },
            errorPlacement: function(error, element) { }            
        });        
    });        
</script>

問題は、ユーザーが有効なデータを入力すると、サーバー側のクリック イベントが2 回呼び出されることですが、その理由がわかりません。誰にもアイデアはありますか?

私の直感は、それは私のjquery validateと関係があるということです。ボタンがデフォルトでポストバックされていること、そしてjqueryの検証のために何らかの形でフォームを再度送信していること。

ここで私がどこで間違っているのか誰にも分かりますか?

ありがとう

4

1 に答える 1

0

pageLoad
リンクにすべてを入れてみてください: http://encosia.com/document-ready-and-pageload-are-not-the-same/

于 2013-02-14T00:07:58.767 に答える