<form id="form1" runat="server" enctype="multipart/form-data">
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<input contenteditable="false" type="file" name="topicupfile" style="width: 280px">
</form>
在一般的文件上传页面,只需要注意form处加上 enctype="multipart/form-data",表示表单上所有信息以流的方式提交就可以了在button1中通过HttpPostedFile hp = Request.Files["topicupfile"];方式获取到上传文件信息。
但当页面用到ajax时,同样的设置确无法获取正确信息,Request.Files["topicupfile"]返回值总为空,页面代码如下:
<form id="form1" runat="server" enctype="multipart/form-data">
<ajaxToolkit:ToolkitScriptManager runat="Server" EnablePartialRendering="true" ID="ScriptManager1" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<input contenteditable="false" type="file" name="topicupfile" style="width: 280px">
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
确切的原因没有从网上找到,但估计是异步传输导致的,所以在UpdatePanel中加了一个同步的trigger,改后代码如下:
<form id="form1" runat="server" enctype="multipart/form-data">
<ajaxToolkit:ToolkitScriptManager runat="Server" EnablePartialRendering="true" ID="ScriptManager1" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<input contenteditable="false" type="file" name="topicupfile" style="width: 280px">
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</div>
</form>
问题解决!