我遇到的问题是在
不使用 a的情况下从 a 获取文件信息<input type=file>
到代码隐藏方法中。当我尝试使用获取信息时,该文件始终在后面的代码中返回为 null,<form>
我相信这是因为它实际上从未被发送到服务器。Request.Files
有没有办法在不使用 a 的情况下将文件信息发送到服务器
?<form>
这是我正在使用的html
<input type="file" id="upload_file" name="upload_file" runat="server" accept="image/*" onchange="copyFile()" />
这是背后的代码
HttpPostedFile file = Request.Files["upload_file"];
if (file != null && file.ContentLength > 0)
{
string fname = Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath(Path.Combine("~/App_Data/", fname)));
}
由于网页的设置方式,我无法使用 a
,它仅在 IE(甚至 IE9)中导致一些可怕的格式问题,我无法在 css 中修复。另外,我正在使用<form>
而不是,<input type=file>
以便我可以访问该<asp:FileUpload>
onchange
事件。
编辑!
在隐藏在网站内的母版页上,有一个已经添加了 runat="server" 的表单。抱歉之前没有提到这一点,我只是在尝试将 runat="server" 添加到我尝试创建的新表单时才发现
任何帮助将不胜感激!谢谢!
编辑!
最终代码
感谢@bkwint 和@TrizZz,如果没有你的帮助,我仍然会努力解决这个问题。
html部分
<asp:FileUpload id="upload_file" runat="server" OnLoad="upload_file_OnLoad" />
后面的代码在 onchange 中添加到 asp:FileUpload
protected void upload_file_OnLoad(object sender, EventArgs e)
{
((System.Web.UI.WebControls.FileUpload)sender).Attributes.Add("onchange", "copyFile();");
}
以及保存文件的代码
if (Request.Files.Count > 0)
{
if (Request.Files[0].FileName.Length > 0)
{
Request.Files[0].SaveAs("~/App_Data/" + Request.Files[0].FileName);
}
}
javascript 允许我使用母版页中的表单进行提交,其中添加了添加到 asp:FileUpload 的 onchange。id 'aspnetForm' 是母版页中的表单。
document.getElementById('aspnetForm').submit();
从我通过更多研究了解到的情况是,可能导致 css 不满意并且表单无法正确提交的原因是嵌套表单不好。由于母版页上有一个我不知道的表单,所以当我添加另一个表单时,网页只是有点忽略了我添加的那个。通过调用母版页上的提交,将上传的文件正确推送到服务器。
再次感谢所有回复/评论和帮助的人!
注意
这在 IE 中可能不起作用,具体取决于您的设置方式。当您尝试直接从文件上传提交表单时,IE 不喜欢它。