ASP.NET MVC5:在填写表单字段期间不显眼的验证

时间:2015-02-20 14:40:40

标签: asp.net asp.net-mvc validation razor unobtrusive-validation

我想在填写表单字段期间启动验证元素 如果我创建一个包含简单模型的简单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(使用模板Edit的Razor) 在这个时候,一切都按预期工作。但只有在单击“保存”按钮(提交表单)时,才会填写字段。这就是为什么我想在脚本部分中对验证器的keyup实施操作:

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

  <script type="text/javascript">

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

  </script>
}


但它不起作用,原始验证也不起作用(现在如果我单击保存,表单将被提交为有效的altrough字段未填充或填写错误)。
如果我只使用原始验证不起作用      $('form').validate(); 要么      $('form').valid(); 命令。 也许有趣的是     $('form').valid(); 返回true虽然表单未填充,因此无效。

1 个答案:

答案 0 :(得分:2)

解决方案非常简单。只是意识到,在不显眼的初始化之后,可以使用脚本进行验证。这个初始化是通过注册新的jquery ready函数来执行的 - 在底部的jquery.validate.unobtrusive.js中找到这段代码:

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

因此,如果必须进行额外的初始化,那么他们必须创建自己的就绪函数并插入必要的代码。

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

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

  <script type="text/javascript">

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

  </script>
}