2

我正在使用 ajax 工具包 asyncFileUpload 控件

我遇到的问题是我的服务器端事件没有触发并发现这篇文章隐藏/显示 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>
4

2 回答 2

1

MasterPage已经有一个form元素。form不允许嵌套...

我不太了解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>

另一个可能的解决方案:

“弹出”一个“模态” form,它只包含您的表单,带有file upload control. 这将解决嵌套表单问题。但是,它确实改变了功能。

于 2012-02-17T15:17:32.557 回答
1

作为一个非常肮脏的黑客尝试在您的表单前面添加一个<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。即使这确实有效,这也不是我所说的解决方案。WebForms 并不是专门为此而设计的。

于 2012-02-17T15:27:33.150 回答