Asp.net mvc 单独上传文件并维护其他控件的状态

Asp.net mvc 单独上传文件并维护其他控件的状态,asp.net-mvc,asp.net-mvc-3,file-upload,razor,Asp.net Mvc,Asp.net Mvc 3,File Upload,Razor,我有一个带Razor的MVC3应用程序。表单是数据驱动的,有一系列的测试框和单选按钮以及一个文件上传控件。文本框和单选按钮以第一种形式存在,上载控件以其自己的形式存在。如果先上传文件,则一切正常。但是,如果说用户用文本框和单选按钮填写表单,然后浏览要附加的文件,并在第二个表单中单击“附加”(提交按钮),整个页面将被发回,所有控件都会丢失其值,并且不是用户的直觉。由于我试图将文件上传和上传作为表单上的一项单独任务,因此我无法在网上找到任何此类场景的示例。我所发现的只是人们在一个subit操作中完成

我有一个带Razor的MVC3应用程序。表单是数据驱动的,有一系列的测试框和单选按钮以及一个文件上传控件。文本框和单选按钮以第一种形式存在,上载控件以其自己的形式存在。如果先上传文件,则一切正常。但是,如果说用户用文本框和单选按钮填写表单,然后浏览要附加的文件,并在第二个表单中单击“附加”(提交按钮),整个页面将被发回,所有控件都会丢失其值,并且不是用户的直觉。由于我试图将文件上传和上传作为表单上的一项单独任务,因此我无法在网上找到任何此类场景的示例。我所发现的只是人们在一个subit操作中完成表单元素和文件上传。我的要求是,文件上传是分开的,这样用户可以附加文件,也可以删除附加的文件,所以只有当他们高兴时,他们才提交表格。欢迎任何指点。

以下是一种您可以尝试的方法,它似乎适合您的场景:

  • 使用AJAX(或Flash/Silverlight/HTML5)上传文件以避免页面重新加载。有很多插件和可能性:,,,,,只要选择一个适合你的
  • 当用户上传文件时,将其存储在服务器上的某个临时位置,并返回一个唯一的id,以便稍后您可以获取此文件
  • 在客户端上,使用id将其注入第一个表单(包含所有文本框和收音机的表单)上的隐藏字段中
  • 当用户提交第一个表单时,上传文件的id将发送到服务器,您将能够获取上传的文件
  • 这种方法还允许您上载多个文件。只需使用jQuery并操作隐藏字段的数组(添加、删除等)