如何上传多个文件与其他表单字段,ASP.净MVC

本文关键字:字段 表单 ASP MVC 其他 文件 | 更新日期: 2023-09-27 18:14:35

我在一个页面上有一个表单。有几个文本输入字段之类的。现在还有一个jQuery文件上传控件,您可以在其中选择几个文件。我现在的问题是,我要求用户首先上传文件(使用jQuery控件),然后我将这些文件保存在会话状态,直到常规表单发布其余的表单字段。然后我从Session中提取之前上传的文件,并做我需要做的事情。

所以基本上填写表单需要两个单独的POST操作返回到服务器。文件,然后是剩余的表单字段。

我想一定有一个更好的方法让用户选择他/她的文件,但不发布任何东西,直到用户提交主表单发布所有其他字段。我在这个网站上读了几篇文章,但我找不到一个解决这个问题的。

如何上传多个文件与其他表单字段,ASP.净MVC

我相信您可以使用Uploadify做到这一点。有两种选择你会想看看。首先,将auto设置为false以防止立即加载所选文件。其次,使用formdata选项将其他表单字段与有效负载一起发送。

然后在用户提交表单时调用upload方法,同时上传队列中的每个文件并发送表单数据。

服务器端部分:

您可能会表单提交给ASPX文件或ASHX处理程序。我更喜欢使用ASHX处理程序,因为它们更轻便。两者都允许您访问HttpContextHttpRequest对象。首先,您需要检查context.Request.Files.Count以确保文件已发布:
if (context.Request.Files.Count > 0) // We have files uploaded
{
   var file = context.Request.Files[0]; // First file, but there could be others
   // You can call file.SaveAs() to save the file, or file.InputString to access a stream
}

获取其他表单字段应该同样容易:

var formfield = context.Request["MyFormField"]; // Some form field

您还可以将结果写回客户端,例如任何结果错误的JSON编码描述:

context.Response.Write(response); // Anything you write here gets passed in to onUploadSuccess

我认为这应该让你开始!