从ViewModel中排除<input type =“file”/>

时间:2012-12-21 02:12:04

标签: asp.net-mvc model-binding

我在“创建”视图中有以下文件输入标记:

<input type="file" id="RequestFile" name="RequestFile"/>
@Html.ValidationMessage("RequestFile")

ViewModel包含相应的属性:

[Required(ErrorMessage="Please select a file")]
public HttpPostedFileBase RequestFile { get; set; }

这在“创建”视图中工作正常,但在“编辑”视图中,我将ModelState.Isvalid视为false。使用相同的ViewModel我想从验证中排除这个字段,因为我不想再次上传文件。

我尝试过简单地禁用输入标记:

<input type="file" id="RequestFile" name="RequestFile" disabled/>            

这有一个禁用的输入控件,但验证仍然被触发。

在Controller中应用BindAttribute也不起作用(see this Question

理想情况下(我知道这听起来不太可能),如果有服务器端解决方案,请发表您的想法。如果有一个小客户端技巧,请告诉我!

2 个答案:

答案 0 :(得分:2)

最好的方法是完全删除属性,并始终直接从表单集合访问它(并手动验证它)或使用属性名称手动删除模型状态错误(如@cheesemacfly在其评论中{{1 }})。后者使得修复非常容易。

答案 1 :(得分:0)

您可以使用form.onsubmit来检查它是否为document.getElementById(“RequestFile”)。value不为null / empty,如果是则取消提交。

类似

<form onsubmit="if(!document.getElementById('RequestFile').value){alert('Please select a file.');return false;}" >
<input type="file" id="RequestFile" name="RequestFile" />
<input type="submit"/>
</form>

return false取消提交。

http://jsfiddle.net/Cg7HY/1/

或将其放在提交按钮本身的点击事件中

http://jsfiddle.net/Cg7HY/3/