不显眼的验证忽略data-val属性,但使用class =“required”

时间:2012-08-10 12:18:46

标签: jquery html5 razor jquery-validate unobtrusive-validation

我有以下观点:

@using (Html.BeginForm())
{
    <div class="left-column">
        @Html.LabelFor(m => m.Expression)
        @Html.TextAreaFor(m => m.Expression, new { @spellcheck = "false" })
        @Html.EditorFor(m => m.Sku)
    </div>
}

使用以下JavaScript在计时器上每秒运行一次:

$("form").validate();

if ($("form").valid()) {
    //...
}

为文本区域元素生成以下html(唯一需要验证的元素):

<textarea 
    data-val="true"
    data-val-required="The Expression field is required."
    cols="20" rows="2"
    id="Expression" name="Expression"
    spellcheck="false">
</textarea>

问题是验证没有做任何事情,除非我使用浏览器工具手动添加class =“required”。如果我执行此验证工作并显示错误消息“需要表达式字段”。确切地说“$(”form“)。valid()”即使textarea为空,也总是返回true。 由于我使用的是自动生成data-val属性的anotations,我想依赖它们。我做错了什么?

仅供参考我的脚本参考如下:

<script src="/Scripts/modernizr-2.0.6-development-only.js" ...
<script src="/Scripts/jquery-1.6.2.js" ...
<script src="/Scripts/Parser.js" ...
<script src="/Scripts/jquery.unobtrusive-ajax.js" ...
<script src="/Scripts/jquery.validate.js" ...
<script src="/Scripts/jquery.validate.unobtrusive.js" ...

1 个答案:

答案 0 :(得分:1)

您是否启用了针对.NET的Unobtrusive Javascript和客户端验证?

尝试在视图中设置以下内容:

@{  Html.EnableUnobtrusiveJavaScript(true);
    Html.EnableClientValidation(true);
    Html.ValidationSummary(true);   
}

您也可以在web.config

中进行全站设置
<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>