2013-06-26 204 views
1

我想知道处理ViewModel字段上属性的客户端,JavaScript或jQuery驱动的MVC4字段验证的最佳方法是什么。执行客户端验证

我这里是

[Required] 
    public string Username { get; set; } 

    [Required] 
    public string Email { get; set; } 

    <div> 
     @Html.LabelFor(m=>m.Username) 
     @Html.ValidationMessageFor(m => m.Username) 
    </div> 

    <div> 
     @Html.LabelFor(m=>m.Email) 
     @Html.ValidationMessageFor(m => m.Email) 
    </div> 

目前,如果我输入一个无效的电子邮件地址,空用户名等形式,并点击提交我正确通知错误。它正在按预期工作

我希望每当用户从文本框和按键失去焦点时,必须对该字段进行验证。

我加入这每一页固定的这个问题..

<script> 
    $("input").blur(function() { 
     $(this).valid(); 
    }); 
    $("input").keydown(function() { 
     $(this).valid(); 
    }); 
</script> 

写作硬编码jQuery的片段是不是最好的选择。我想要一个数据驱动的方法,可能嵌入在MVC4中,或者如果有一种方法来配置jquery.validate.unobtrusive来执行此验证。

等待回复,

Thanks- 阿图尔

回答

1

尝试把jquery.validate和jquery.validate.unobtrusive脚本页面上

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

,并呼吁

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

或在web.config中设置下一个设置:

<appSettings> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings> 

看看这里的更多信息:Unobtrusive Client Validation in ASP.NET MVC 3

编辑:

第一种形式submition后

jQuery验证需要它的作用,看看onfocusout在源代码的onkeyup:

onfocusout: function(element, event) { 
      if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) { 
       this.element(element); 
      } 
     }, 
onkeyup: function(element, event) { 
      if (event.which === 9 && this.elementValue(element) === "") { 
       return; 
      } else if (element.name in this.submitted || element === this.lastElement) { 
       this.element(element); 
      } 
     }, 

如果您需要强制验证blur和keydown,您可以尝试覆盖这些函数的默认定义。尝试使用验证器对象(它是验证的所有元数据,使我们能够随时访问页面周期中的验证选项)。下面的代码演示它:

<script src="/Scripts/jquery.validate.js"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.js"></script> 
<script type="text/javascript"> 
    $(function() { 
     //this function will be called after validation has triggered 
     function isValid(element) { 
      this.element(element); 
     } 
     //get current form validator (here could be other selector that corresponds to your form) 
     var validator = $('form').data('validator'); 
     validator.settings.onfocusout = isValid; 
     validator.settings.onkeyup = isValid; 
    }); 
</script> 
+0

已经做了它,但它不工作,它击中提交按钮不焦点和按键。 – user2308142

+0

您是否看到属性data-val =“true” data-val-required =“用户名字段是必需的。”在您检查由@ Html.TextBoxFor(m => m.Username)生成的标记时输入什么内容? –

+0

是的我能够看到data-val =“true”data-val-required =“用户名字段是必需的。”在输入标签中。这个问题是第一次,当我点击提交按钮后,它与点击和聚焦。 – user2308142