您好,
我有一个包含一些输入字段的视图,其中一些字段是常规文件输入。提交此视图表单时,文件将保存在临时文件夹中。但是,如果在服务端检测到验证问题,则将返回相同的视图(用于更新)。问题是文件输入不会再次填充(安全性),而是我必须扩展视图类并显示存储文件的小缩略图,并且还可以删除(以便能够上传另一个文件)。
当用户再次点击提交时,视图类将不包含有关存储文件的任何数据。对此最好的做法是什么?
我自己的想法是以下之一:
请求建议
我的解决方案: 我最终使用System.Web.Cache来保持请求之间的数据。创建并接受广告后,它将从缓存中删除并添加到数据库中。
答案 0 :(得分:2)
您可以使用MVC的TempData
功能。基本上TempData
是基于会话的存储,它将数据缓存到下一个请求。您可以为每个请求存储一个现有文件列表,并在每次处理表单时将其保存到TempData
(并随后将其读取)?
答案 1 :(得分:0)
我使用jquery表单插件解决了这个问题:http://jquery.malsup.com/form/
这样文件通过ajax发送(插件内部使用iframe),返回JsonResult(即你可以执行服务器端验证等),页面上的表单实际上没有变化,你可以在重新提交,无需再次选择文件。
注意:如果使用插件在MVC中返回JsonResult,则需要将JsonResult包装在“textarea”标记中。看一篇包含JsonResult并排除testarea异常的类的帖子:http://aspzone.com/tech/jquery-file-upload-in-asp-net-mvc-without-using-flash/