Как использовать форму с method = "post" в веб-форме asp.net - PullRequest
2 голосов
/ 17 февраля 2012

Я использую ajax toolkit asyncFileUpload control

У меня была проблема с тем, что мои события на стороне сервера не запускаются, и обнаружил эти сообщения Скрытый / показанный элемент управления AsyncFileUpload не запускает событие UploadedComplete на стороне сервера

Я вставил свой загрузчик внутри формы и с этими атрибутами enctype="multipart/form-data" method="post"

Этот загрузчик находится внутри моей веб-формы, которая находится внутри главной страницы

После добавления этих атрибутов я получилэта ошибка

    A page can have only one server-side Form tag.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: A page can have only one server-side Form tag.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 

А вот моя веб-форма

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <form id="Form1" enctype="multipart/form-data" method="post" action="target_url"
    runat="server">
    <div id="Div1" runat="server">
        Just some time to make sure that the page doesn't get reloaded after uploading:
        <%=DateTime.Now %><br />
        <ajaxToolkit:AsyncFileUpload ID="FileUpload" runat="server" OnUploadedComplete="FileUpload_UploadCompleted"
            OnClientUploadComplete="FileUpload_ClientUploadCompleted" OnClientUploadError="uploadError"
            OnLoad="FileUpload_OnLoad" />
        <asp:Image runat="server" ID="imgUpload" src="" />
        <asp:Label runat="server" ID="lblerror" Text="" />
    </div>
    </form>
</asp:Content>

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Как очень грязный хак, попробуйте добавить <form></form> перед вашей формой и уберите runat = "server" из вашей вложенной формы.

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    **<form></form>**
    <form id="Form1" enctype="multipart/form-data" method="post" action="target_url"
    >
    <div id="Div1" runat="server">
        Just some time to make sure that the page doesn't get reloaded after uploading:
        <%=DateTime.Now %><br />
        <ajaxToolkit:AsyncFileUpload ID="FileUpload" runat="server" OnUploadedComplete="FileUpload_UploadCompleted"
            OnClientUploadComplete="FileUpload_ClientUploadCompleted" OnClientUploadError="uploadError"
            OnLoad="FileUpload_OnLoad" />
        <asp:Image runat="server" ID="imgUpload" src="" />
        <asp:Label runat="server" ID="lblerror" Text="" />
    </div>
    </form>
</asp:Content>

В прошлом это работалодля меня - когда вынуждены работать с WebForms.Я не знаю почему, но я нахожу это довольно много с WebForms.

Вы действительно должны переключиться на MVC, если вы хотите написать код, подобный этому.Даже если это работает, это не то, что я бы назвал решением.Веб-формы просто не предназначены для этого.

1 голос
/ 17 февраля 2012

Ваш MasterPage уже имеет элемент form. Вложенные form s не допускаются ...

Я немного знаю о ajaxToolkit:AsyncFileUpload, но, поскольку это серверный элемент управления, он должен изменить свойства родительского form. Вы пытались удалить форму как код ниже?

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <div id="Div1" runat="server">
        Just some time to make sure that the page doesn't get reloaded after uploading:
        <%=DateTime.Now %><br />
        <ajaxToolkit:AsyncFileUpload ID="FileUpload" runat="server" OnUploadedComplete="FileUpload_UploadCompleted"
            OnClientUploadComplete="FileUpload_ClientUploadCompleted" OnClientUploadError="uploadError"
            OnLoad="FileUpload_OnLoad" />
        <asp:Image runat="server" ID="imgUpload" src="" />
        <asp:Label runat="server" ID="lblerror" Text="" />
    </div>
</asp:Content>

Другое возможное решение:

"Pop" - "модальный" form, который просто содержит вашу форму с file upload control. Это исправит проблему вложенных форм. Но это изменило функциональность.

...