如何上载多个文件以及其他表单字段,ASP.NET MVC

时间:2013-05-20 20:38:02

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

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

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

我认为必须有一种更好的方法让用户选择他/她的文件但不发布任何内容,直到用户提交主表单发布所有其他字段。我在这个网站上看过几篇帖子,但我找不到解决这个问题的帖子。

非常感谢任何建议/协助。

1 个答案:

答案 0 :(得分:4)

我相信你可以使用Uploadify来做到这一点。您需要查看两个选项。首先,设置auto to false以防止立即加载所选文件。其次,使用formdata option发送您的其他表单字段以及有效负载。

当用户提交表单,上传队列中的每个文件并一次性发送表单数据时,您可以调用upload method

服务器端部分:

您可能将表单提交到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

我认为无论如何都应该让你开始!