使用没有表单的输入类型=文件

时间:2012-08-22 12:47:23

标签: c# html

我遇到的问题是从<input type=file>获取文件信息而不使用<input type=file>进入代码隐藏方法。当我尝试使用<form>获取信息时,文件总是在后面的代码中返回null,我相信这是因为它实际上从未被发送到服务器。

无论如何都要在不使用<form>的情况下将文件信息发送到服务器?

这是我正在使用的html Request.Files

这是背后的代码 Request.Files

<form>

<form>

由于网页的设置方式,我无法使用<input type="file" id="upload_file" name="upload_file" runat="server" accept="image/*" onchange="copyFile()" />,只会在IE(甚至是IE9)中导致一些可怕的格式问题,我无法在css中修复。此外,我使用<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)));
    }
事件。

修改<!/强>
在网站中隐藏的母版页是一个已经添加了runat =“server”的表单。很抱歉没有提到这个,我刚刚发现在尝试将runat =“server”添加到我正在尝试创建的新表单时

任何帮助将不胜感激!谢谢!

修改<!/强>
最终代码
感谢@bkwint和@TrizZz,没有你的帮助,我仍然会想到这一点。

html部分

if (file != null && file.ContentLength > 0) { string fname = Path.GetFileName(file.FileName); file.SaveAs(Server.MapPath(Path.Combine("~/App_Data/", fname))); }

将onchange中添加到asp:FileUpload

的代码

以及保存文件的代码

<form>

允许我使用添加到asp:FileUpload的onchange在提交母版页中使用表单的javascript。 id'aspnetForm'是母版页中的表单。

<form>

从我通过更多的研究中学到的是,可能导致css不满意的原因以及不能正确提交的形式是因为嵌套形式很糟糕。由于在母版页上有一个我不知道的表单,当我添加另一个表单时,网页只是忽略了我添加的那个。通过调用母版页上的提交,上传的文件被正确推送到服务器。

再次感谢所有回复/评论和帮助的人!

注意
这可能不适用于IE,具体取决于您的设置方式。当您尝试直接从fileupload提交表单时,IE不喜欢它。

2 个答案:

答案 0 :(得分:2)

你需要一个表单来使用表单控件..我知道你说你有一些CSS问题,但是如果它导致问题,你将能够处理你的CSS。


HttmpPostedFile仅在提交时发布,这就是为什么你得到一个NULL文件。获取post方法需要表单。文件仅在发布期间发送,您需要执行此操作:

<form action="yourPage.aspx" method="post">
<input type="file" onchange="this.form.submit()" name="upload_file" id="upload_file"/>
</form>

在yourPage.aspx的加载事件中:

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)));
}

使用这种方法,你应该没有问题,当然除了你的CSS

答案 1 :(得分:1)

您的文件输入应放在表单内。据我所知,没有办法将其保留在表格标签之外,仍然可以发送数据....

至于使用标记而不是点网络FileUpload标记的原因。你为什么不在后端发布onchange javascript。

所以像这样定义你的标签

<asp:FileUpload ID="FlUpld_x" runat="server" OnLoad="FlUpld_x_OnLoad" />

并像这样定义你的代码

protected void FlUpld_x_OnLoad(object sender, EventArgs e)
{
  ((FileUpload)sender).Attributes.Add("onchange", "js_function();");
}