目前,我有一个使用Razor View引擎的MVC 3应用程序。我启用了不显眼的验证。问题是由于某种原因,在页面加载时,我的编辑视图显示必填字段的错误(即使字段有值)。还有其他人遇到过这个吗?有什么建议可以解决这个问题?感谢。
带问题的示例字段:
<div class="full">
<label>Description:</label>
@Html.EditorFor(x=>x.Description, new{@class="super-textarea"})
@Html.ValidationMessageFor(x => x.Description)
</div>
模型上的数据注释:
[Required, DataType(DataType.MultilineText)]
public virtual string Description { get; set; }
WebConfig启用设置:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
当然还有正确的jquery文件......
答案 0 :(得分:16)
您还可以清除ModelState中的错误
ModelState.Clear();
答案 1 :(得分:11)
确定。发现了问题。由于模型绑定试图发生,验证正在发生。这是因为我们的Get方法看起来像这样。
[HttpGet, RequestedObjectFilter]
public virtual ViewResult Edit(TKey id, T requestedObject)
{
return View(requestedObject);
}
.NET MVC的一个特性是,无论何时将参考值作为ViewResult的Method Signature中的参数传递,都会触发ModelBinding,从而触发验证。我们将对象传递给我们的方法的原因是我们的RequestedObjectFilter,它将从我们的抽象存储库中获取相关实体,并通过ActionParameters属性将其传递给此方法。我们重构了RequestedObjectFilter来设置ViewModel,允许我们从方法中删除参数,从而解决问题。现在我们的方法如下:
[HttpGet, RequestedObjectFilter]
public virtual ViewResult Edit(TKey id)
{
return View();
}