0

そこで、ASP.NET WebForm アプリケーション内に jQuery ダイアログ ボックスを用意し、そこから含まれているすべてのコントロールのコンテンツを別のページに投稿します。問題は FileUpload コントロールです。EnablEventValidation が true に設定されている場合 (デフォルトではそうなっていると思います)、このエラーが発生します...

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

...そして、EnableEventValidation='false'設定すると、コントロールに設定された画像FileUploadが投稿されますが、投稿された他のすべての値は null として返されます。したがって、コントロールだけを無効にするか、何らかの方法で手動で検証する必要があると思います。しかし、私はどちらかを行う方法がわかりません。また、 false に設定されている場合、他のすべての投稿値が null になる理由がわかりません。これが私のダイアログマークアップです...EventValidationFileUploadEnableEventValidation

 <div class="divDialog" style="display: none">
            <table style="width: 100%;">
                <tr>
                    <td>First Name: <asp:TextBox ID="txtFirstName" runat="server" Text=""></asp:TextBox></td>
                    <td>Last Name: <asp:TextBox ID="txtLastName" runat="server" Text=""></asp:TextBox></td>
                </tr>
                <tr>
                    <td>
                        How Old are You?
                        <asp:DropDownList ID="ddlAge" runat="server">
                            <asp:ListItem Value="1">1</asp:ListItem>
                            <asp:ListItem Value="2">2</asp:ListItem>
                            <asp:ListItem Value="3">3</asp:ListItem>
                        </asp:DropDownList>
                    </td>
                    <td>
                        How Many Siblings do You Have?
                        <asp:DropDownList ID="ddlNumberSiblings" runat="server">
                            <asp:ListItem Value="1">1</asp:ListItem>
                            <asp:ListItem Value="2">2</asp:ListItem>
                            <asp:ListItem Value="3">3</asp:ListItem>
                            <asp:ListItem Value="4">4</asp:ListItem>
                        </asp:DropDownList>
                    </td>
                </tr>
                <tr>
                    <td>
                        What is your birthday?
                        <input type="text" id="datepicker" name="datepicker" />
                    </td>
                </tr>
                <tr>
                    <td>
                        Please Choose a Picture to Upload:
                        <asp:FileUpload ID="fupUserPicture" runat="server" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="forcebtnHiddenClick(); return false;" />
                    </td>
                </tr>
            </table>
        </div>

編集: また、これは関連する可能性があります。ダイアログ div は、作成後にフォーム内にある div に追加されます。これがフォームとdivマークアップです...

<form id="frmDialog" runat="server">
        <asp:Button ID="btnDisplayDialog" runat="server" Text="Click to Display Login Dialog" OnClientClick="showDialog(); return false;" />
        <div class="divInnerForm"></div>

...

</div>
<asp:Button ID="btnHidden" runat="server" Text="" Visible="false" ClientIDMode="Predictable"  OnClick="btnHidden_Click"/>

...そしてここにjQueryスクリプトがあります...

function showDialog() {
    $('.divDialog').dialog({
        modal: true, show: 'slide', width: 500,
        open: function (event, ui) {
            $('.divInnerForm').append($(this).parent());
        }
    });
}
4

1 に答える 1

0

問題はネストされたフォーム タグである可能性があります。asp.net Webフォームを使用しているため、

 <form runat="server">

ページの本文を囲むタグ。また、プラグインは div の周りにフォーム タグを作成するため、ネストされたフォーム タグ、つまり別のフォーム タグ内のフォーム タグがある場合があります。また、ネストされたフォームは html 準拠ではないため、ブラウザーはそれらを処理する際に奇妙な動作をします。

お役に立てれば。

于 2013-05-09T20:10:10.850 に答える