页面加载验证触发

时间:2012-03-23 00:52:58

标签: asp.net-mvc-3 unobtrusive-validation

目前,我有一个使用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文件......

2 个答案:

答案 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();
    }