MVC:如何在隐藏字段上启用客户端验证

时间:2014-07-04 10:56:20

标签: jquery asp.net-mvc asp.net-mvc-4 jquery-validate unobtrusive-validation

@Scripts

 <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")"></script>
  <script src="@Url.Content("~/Scripts/jquery.validate.js")"></script>
  <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"></script>

@View

@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{ 
    @Html.TextBoxFor(x => x.htmlText, new { style="display:none"})<br />
    @Html.ValidationMessageFor(x => x.htmlText)
    <div>
      @Html.TextBoxFor(x => x.Uprop1)<br />
      @Html.ValidationMessageFor(x => x.Uprop1)
    </div>
    <input type="submit" value-="Submit" onclick="abc()" />
}

我尝试了什么

  1. ignore:“:hidden”,替换为 ignore:“”,在validate.js内
  2. var validateMeta = $('#form123')。validate();         validateMeta.settings.ignore =“”;

  3. $.validator.setDefaults({ignore: ""});

  4. $.validator.setDefaults({ ignore: [] });

5 个答案:

答案 0 :(得分:38)

我遇到了同样的问题。页面上的隐藏字段存储用户ID,该用户ID是从自动填充文本框中选择的。此ID已进行验证,以确保回发非零ID。我们希望在客户端包含此验证。

默认情况下,jQuery validate忽略隐藏字段,宽度和高度为零的元素,css display:none和任何具有不可见父元素的元素(使用相同的标准)。

然后可以通过添加以下脚本来覆盖忽略设置(我在调用$ .validator.addMethod()之前将其添加到我的自定义验证器脚本中):

// By default validator ignores hidden fields.
// change the setting here to ignore nothing
$.validator.setDefaults({ ignore: null });

注意:如果代码在document ready或jQuery $(function () {})方法中运行,则该代码无法正常工作。

答案 1 :(得分:11)

在插入验证脚本之后,将ignore设置为“”:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
    $.validator.setDefaults({
        ignore: ""
    });
    </script>
}

答案 2 :(得分:5)

我不确定为什么您需要显示用户无法查看或编辑的字段的验证。但你可以试试这个。将display:nonevisibility:hidden应用于输入字段,而不是height:0

@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{ 
    @Html.TextBoxFor(x => x.htmlText, new { style="visibility:hidden;height:0"})<br />
    @Html.ValidationMessageFor(x => x.htmlText)
    <div>
      @Html.TextBoxFor(x => x.Uprop1)<br />
      @Html.ValidationMessageFor(x => x.Uprop1)
    </div>
    <input type="submit" value-="Submit" onclick="abc()" />
}

答案 3 :(得分:5)

尝试

 var validator = $("#form-id").data('validator');
 validator.settings.ignore = "";

答案 4 :(得分:0)

var validator = $("#form-id").data("validator");    
validator.settings.ignore = ""; /* Set validator to ignore nothing. */
validator.form(); /* Validates the form, returns true if it is valid, false otherwise. */

console.log(validator.valid());
console.log(validator.errorList);