【问题标题】:FileUpload.HasFile always nullFileUpload.HasFile 始终为空
【发布时间】:2012-03-28 20:09:33
【问题描述】:

我想知道为什么我的方法 FileUpload.HasFile 总是 null ..

这是我使用的 Xaml。

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanelAddFiles" runat="server" UpdateMode=Conditional>
        <Triggers>
           <asp:AsyncPostBackTrigger ControlID="LkUpload" />
        </Triggers>
        <ContentTemplate>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Panel ID="PanelAddFiles" runat="server">
        <div class="PanelAddFiles">
            <asp:LinkButton ID="LkUpload" runat="server" OnClick="LkUpload_Click" Visible="false">Upload</asp:LinkButton>
            <asp:FileUpload ID="FileUpload1" runat="server" Visible="false" />
        </div>
    </asp:Panel>

编辑:

我认为问题之一是这个

    <form action="Upload/Default.aspx" enctype="multipart/form-data" method="post" id="frm">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanelAddFiles" runat="server" UpdateMode=Conditional>
        <Triggers>
           <asp:AsyncPostBackTrigger ControlID="LkUpload" />
        </Triggers>
        <ContentTemplate>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Panel ID="PanelAddFiles" runat="server">
        <div class="PanelAddFiles">
            <asp:LinkButton ID="LkUpload" runat="server" OnClick="LkUpload_Click" Visible="false">Upload</asp:LinkButton>
            <!--<asp:FileUpload ID="FileUpload1" runat="server" Visible="false" />-->
            <ajaxToolkit:AsyncFileUpload runat="server" ID="FileUpload1" />
            <asp:Panel ID="Dropbox" runat="server">
                <div class="dropbox">
                    <div class="dragzone">
                    </div>
                    <span class="message">
                drop files here to upload
            </asp:Panel>
        </div>
    </asp:Panel>
    </form>
</div>

因为有页面的形式,也有我这里使用的形式。我有一个 Dropbox 显示与否,不管它是不是 IE。所以当它是 IE 时,我只显示 fileupload 。 也许是因为有两种形式它不再发射了?

我一定要使用这个 AjaxToolkit 吗?

【问题讨论】:

  • 删除 Visible="false"asp:FileUpload 控件

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


【解决方案1】:

FileUpload 在 UpdatePanel 中不起作用。您必须使用 ASPNET AJAX 控件工具包中的AsyncFileUpload


当您使用 AsyncFileUpload 时,您必须在 form 标记中设置正确的参数,该标记位于您的 Page 或 MasterPage 中:

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

如果您没有设置正确的 enctype 和方法 UploadedComplete 将永远不会触发,那么您将无法获得 FileUpload.FileBytes,因为 FileUpload .HasFile 仅在 UploadedComplete 执行期间返回 true。


此外,以前版本的 AsyncFileUpload 无法在 Chrome 上运行。实际版本解决了这个问题。

【讨论】:

  • 那么有没有其他方法可以在没有这个更新面板及其工作的情况下使用 FileUpload ?
  • FileUpoad 必须放在更新面板之外:它需要页面的完整回发。没有更新面板 FileUpload 工作
  • 当我没有更新面板而只有
    上传​​ton>
    FileUpload 始终为空
【解决方案2】:

使用以下代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="futest.aspx.cs" Inherits="erpweb.futest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="smTest" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="upTest" runat="server">
        <ContentTemplate>
            <ajaxToolkit:AsyncFileUpload ID="AsyncFileUpload1" runat="server" 
                onuploadedcomplete="AsyncFileUpload1_UploadedComplete" />
        </ContentTemplate>
    </asp:UpdatePanel>

    </div>
    </form>
</body>
</html>

后面的代码:

protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {
        if (AsyncFileUpload1.HasFile)
        {
            //do save process here
        }
    }

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2019-07-18
    • 2019-08-18
    • 2011-12-29
    相关资源
    最近更新 更多