【问题标题】:Exclude <input type='file'> from ViewModel从 ViewModel 中排除 <input type='file'>
【发布时间】:2012-12-21 10:26:00
【问题描述】:

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

<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)

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

【问题讨论】:

  • ModelState.Remove("RequestFile"); ?
  • @cheesemacfly 谢谢!行得通。

标签: asp.net-mvc model-binding


【解决方案1】:

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

【讨论】:

  • 谢谢,FormCollection 方法也应该可以工作。在这种情况下,我们将忽略模型绑定。
【解决方案2】:

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

类似

<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/

【讨论】:

  • 我想在“编辑”视图中提交带有空文件的表单。我想知道在这种情况下我们是否可以忽略该字段。
猜你喜欢
  • 2012-05-06
  • 2010-11-05
  • 2017-12-04
  • 2016-05-25
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多