当提交表单无效时,要上传的选定文件会消失

时间:2016-01-12 22:05:44

标签: asp.net forms asp.net-mvc-5

当用户选择要随其上传的文件并提交无效表单时,他们选择的文件将消失,而表单的其余部分保持不变。有没有办法让所选文件在提交无效时不会消失?

我应该包括我没有为此制作ViewModel。他们将两个不同的模型(表单/字段本身和文档信息)放在一起。使用包含在其中的文档制作表单的ViewModel会阻止这种情况发生吗? (如果是这样,我不得不重构我的大部分代码,这不是现在最好的选择)

我还考虑通过JS投入不引人注目的验证来绕过这一点,但我想看看其他一些我可以尝试的潜在解决方案。

1 个答案:

答案 0 :(得分:0)

与其他表单控件不同,您无法在控制器中设置public class TestViewModel() { public int Id { get; set; } public IEnumerable<Organisation> KPI { get; set; } } public class Organisation { public string Id { get; set; } public string Name {get; set;} public DateTime StartDate {get; set;} public IEnumerable<Regiod> CategoryValues { get; set; } } public class Region { public System.Guid Id { get; set; } public System.Int32 RegionId { get; set; } public int Value { get; set; } public System.String RegionName { get; set; } } [HttpGet] public ActionResult edit(int id) { var model = new TestViewModel(); // Do something to populate the model view(model) } 的值。如果可能,这将是一个主要的安全问题(想象导航到包含数百个隐藏文件输入的网站,例如&#34; C:/Password.doc" - 它会在您不知情的情况下从您的设备下载文件)

如果由于模型无效而需要返回视图,则用户需要重新选择文件,或者需要在返回视图之前保存文件(可能是临时位置)。然后,您可以返回该文件的名称和路径,以便它可以显示在视图中以指示它已被上传(也可能是相关的删除按钮,以便用户可以在他们改变主意时将其删除。

拥有包含[HttpPost] public ActionResult edit(TestViewModel model) { // Do something to populate the model } 属性的视图模型以及文件名及其临时路径将使处理更容易。