当用户选择要随其上传的文件并提交无效表单时,他们选择的文件将消失,而表单的其余部分保持不变。有没有办法让所选文件在提交无效时不会消失?
我应该包括我没有为此制作ViewModel。他们将两个不同的模型(表单/字段本身和文档信息)放在一起。使用包含在其中的文档制作表单的ViewModel会阻止这种情况发生吗? (如果是这样,我不得不重构我的大部分代码,这不是现在最好的选择)
我还考虑通过JS投入不引人注目的验证来绕过这一点,但我想看看其他一些我可以尝试的潜在解决方案。
答案 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
}
属性的视图模型以及文件名及其临时路径将使处理更容易。