ASP.NET MVC中提交表单后上传控件选中文件不保留问题咨询
问题解答
核心结论
你认为该问题和Ajax有关的判断是不正确的,该现象是浏览器的原生安全限制导致,和ASP.NET MVC框架、Ajax技术没有直接关联。
原因说明
- 出于用户隐私和安全考量,浏览器禁止任何代码主动为
<input type="file">文件上传控件赋值,控件的值只能由用户手动在本地选择文件生成 - ASP.NET MVC表单提交后如果触发整页回发(服务端返回新的视图页面),服务端仅能为普通表单控件(文本框、下拉框等)回显填充值,无法为文件上传控件赋值,因此之前选中的文件会丢失,其他控件值可正常保留
- 如果使用Ajax异步提交表单,只要提交时正确将文件对象封装到
FormData中,文件可以正常上传,不会出现丢失问题;只有页面重新渲染(包括整页刷新、局部替换文件控件所在的DOM节点)时,文件上传控件的值才会被清空。
可行解决方案
- 优先采用Ajax异步提交表单,校验失败时不刷新/重绘当前页面,即可保留用户已选中的文件
- 若业务逻辑必须走整页回发流程,只能在回显页提示用户重新选择文件,没有方法可以绕过浏览器安全限制自动恢复之前选中的文件。
内容的提问来源于stack exchange,提问作者Contact K
相关产品推荐
相关产品推荐

