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

Rol*_*sta 21 asp.net-mvc jquery jquery-validate unobtrusive-validation asp.net-mvc-4

@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>
Run Code Online (Sandbox Code Playgroud)

@视图

@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()" />
}
Run Code Online (Sandbox Code Playgroud)

我尝试过什么

  1. 更换忽略:":隐藏",忽略:"",里面validate.js
  2. var validateMeta = $('#form123').validate(); validateMeta.settings.ignore ="";

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

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

Rob*_*mes 41

我遇到了同样的问题.页面上的隐藏字段存储用户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 });
Run Code Online (Sandbox Code Playgroud)

注意:如果它在document readyjQuery $(function () {})方法中运行,则此代码将不起作用.

  • 值得注意的是,如果在 `document ready`(或 jQuery `$(function () {})` 快捷方式)函数内部调用它,这将不起作用 (4认同)
  • 只是为了添加这个,您还可以返回一个自定义函数(代替null),如果您只想定位某些隐藏字段,可以添加条件. (2认同)

Ion*_*utC 12

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

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

  • `$ .validator.setDefaults({ignore:""});`对我不起作用,但`$ .validator.setDefaults({ignore:[]});`做了.作为参考,我正在使用:ASP.NET MVC 5,Bootstrap 3.3.6,Kendo UI 2016.1.112,jQuery 1.9.1(包含在Kendo中),jQuery Validation 1.14.0和MS jQuery Unobtrusive Validation 3.2.2. (7认同)
  • 另外,请确保不要将其放在Document.Ready()中. (5认同)

Mr.*_*hoo 7

尝试

 var validator = $("#form-id").data('validator');
 validator.settings.ignore = "";
Run Code Online (Sandbox Code Playgroud)


san*_*eev 5

我不确定为什么您需要显示用户无法查看或编辑的字段的验证.但你可以试试这个.而不是display:none,应用 visibility:hiddenheight: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()" />
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能还有其他与用户交互的可见字段,这些字段设置了隐藏字段的值。然后,您可能要验证隐藏字段中已建立的值。例如,日,月,年的三个字段以及一个用于设置和验证整个日期的隐藏字段。 (2认同)