页面加载验证触发

use*_*132 6 unobtrusive-validation asp.net-mvc-3

目前,我有一个使用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>
Run Code Online (Sandbox Code Playgroud)

模型上的数据注释:

     [Required, DataType(DataType.MultilineText)]
    public virtual string Description { get; set; }
Run Code Online (Sandbox Code Playgroud)

WebConfig启用设置:

     <add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
Run Code Online (Sandbox Code Playgroud)

当然还有正确的jquery文件......

Aar*_*man 16

您还可以清除ModelState中的错误

ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)


use*_*132 11

好.发现了问题.由于模型绑定试图发生,验证正在发生.发生这种情况是因为我们的Get方法看起来像这样.

    [HttpGet, RequestedObjectFilter]
    public virtual ViewResult Edit(TKey id, T requestedObject)
    {

        return View(requestedObject);
    }
Run Code Online (Sandbox Code Playgroud)

.NET MVC的一个特性是,无论何时将参考值作为ViewResult的Method Signature中的参数传递,都会触发ModelBinding,从而触发验证.我们将对象传递给我们的方法的原因是我们的RequestedObjectFilter,它将从我们的抽象存储库中获取相关实体,并通过ActionParameters属性将其传递给此方法.我们重构了RequestedObjectFilter来设置ViewModel,允许我们从方法中删除参数,从而解决问题.现在我们的方法如下所示:

     [HttpGet, RequestedObjectFilter]
    public virtual ViewResult Edit(TKey id)
    {

        return View();
    }
Run Code Online (Sandbox Code Playgroud)