我想知道为什么我的方法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时,我只显示文件上传量。 也许是因为有两种形式它不再发射了?
我应该定义使用这个AjaxToolkit吗?
答案 0 :(得分:6)
FileUpload在UpdatePanel中不起作用。您必须使用ASPNET AJAX控件工具包中的AsyncFileUpload 。
当您使用AsyncFileUpload时,您必须在表单标记中设置正确的参数,该标记位于您的Page或MasterPage中:
<form id="form1" runat="server" enctype="multipart/form-data" method="post">
如果你没有设置正确的enctype和方法 UploadedComplete永远不会触发,你将无法获得 FileUpload.FileBytes ,因为 FileUpload .HasFile 仅在UploadedComplete执行期间返回true。
此外,prevoius版本的AsyncFileUpload在Chrome上无效。实际版本解决了这个问题。
答案 1 :(得分:3)
使用以下代码:
<%@ 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
}
}