我在“创建”视图中有以下文件输入标记:
<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)
理想情况下(我知道这听起来不太可能),如果有服务器端解决方案,请发表您的想法。如果有一个小客户端技巧,请告诉我!
答案 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取消提交。
或将其放在提交按钮本身的点击事件中