我想使验证元素在填写表单字段期间启动。
如果我创建一个包含简单模型的简单MVC应用程序:


public class SimpleModel
  {
    [RegularExpression("[A-Z][a-z]+")]
    [Required]
    public string FirstName { get; set; }

    [RegularExpression("[A-Z][a-z]+")]
    [Required]
    public string LastName { get; set; }
  }


对于此模型,我为此模型创建了相应的Controller和View(Razor使用模板Edit)。
此时,一切都按预期进行。但仅在单击“保存”按钮(提交表单)时,而不是在填写字段时。这就是为什么我要在脚本部分中实现验证器的onkeyup动​​作:

@section Scripts
{
  @Scripts.Render("~/bundles/jqueryval")

  <script type="text/javascript">

    $('form').validate(
      {
        onkeyup: function (element)
        {
          $.validator.unobtrusive.parseElement(element, true);
        }
      });

  </script>
}



但这不起作用,并且原始验证也不起作用(现在,如果我单击保存,则表单将作为有效槽口字段未填写或填写不正确而提交)。
如果我仅使用原始验证就行不通
$('form').validate();
要么
$('form').valid();
命令。
也许有趣的是
$('form').valid();
尽管没有填写表格,所以返回true,因此无效。

最佳答案

解决方案很容易。只需意识到,使用脚本进行验证就可以在不打扰的初始化之后进行。通过注册新的jquery ready函数来执行此初始化-在底部的jquery.validate.unobtrusive.js中,您会找到以下代码:

$(function () {
  $jQval.unobtrusive.parse(document);
});


因此,如果必须执行附加的初始化,那么它们必须创建自己的ready函数并插入必要的代码。

为了上述问题中提到的目的,您可以使用以下代码:

@section Scripts
{
  @Scripts.Render("~/bundles/jqueryval")

  <script type="text/javascript">

    $(function ()
    {
      var validator = $('form').validate();
      validator.form();
    });

  </script>
}

09-25 22:25
查看更多