为什么在带有ajax更新面板的用户控件中使用文件上传不起作用?

时间:2014-11-06 05:54:29

标签: c# asp.net file-upload updatepanel ajaxcontroltoolkit

我试图在我的网络应用程序中创建用于上传和下载附件的用户控件。

在我的用户控件中,我使用asp.net更新面板上传和下载文件,并在<dive>...</dive>标签中使用我的用户控件,显示样式为无。

当我使用此用户控件时,我试图设置<dive>...</dive>标签显示样式以显示用户控件,并且我使用下面的代码在模态弹出模式下显示此用户控件:

<ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender" runat="server" CancelControlID="CancelButton" DropShadow="true" PopupControlID="PanelMain" PopupDragHandleControlID="PanelHeader" TargetControlID="btnFileOperation" />

在我的用户控件中,我写下相同的代码:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:FileUpload ID="fileUploadImage" runat="server" />
            <asp:Button ID="Button1" runat="server" Text="Upload Image" OnClick="btnUpload2_Click" />
            <br />
            <asp:Label ID="lblMessage" runat="server" Text="Image uploaded successfully." Visible="false"></asp:Label><br />
            <asp:UpdateProgress ID="UpdateProgress1" runat="server"        AssociatedUpdatePanelID="UpdatePanel1">
            <ProgressTemplate>
                    Please wait image is getting uploaded....
            </ProgressTemplate>
            </asp:UpdateProgress>
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="btnUpload"  />
        </Triggers>
</asp:UpdatePanel>

但是当我想在代码中访问FileUpload.PostedFile或FileUpload.HasFile属性时(单击上传按钮的事件),这些属性为空。

这个问题可能是什么原因?以及如何解决它?

1 个答案:

答案 0 :(得分:0)

我在这个问题上花了好几个小时,终于在一个有五年历史的asp.net论坛帖子上找到了答案:UpdatePanel + FileUpload + PostBackTrigger doesn't seem to work。要将其简化,在我的site.master页面上,<form>标记只是:

  

<form id="Form1" runat="server">

2007年的帖子建议将其更改为:

  

<form id="Form1" method="post" enctype="multipart/form-data" runat="server">

效果很好!我不明白为什么,但确实如此。

我在网上找到的大部分答案 - 包括StackOverflow上的几个答案 - 建议只为更新面板创建一个回发触发器。没有任何变化对我有用。在退出时间前大约五分钟,我在asp.net论坛上找到了这个不起眼的页面。最好的感受之一就是在回家之前解决问题。

我希望这会对你有所帮助。