使用nHibernate.validator的MVC.NET中的xVal不会触发客户端验证

时间:2009-09-22 09:19:37

标签: asp.net-mvc xval nhibernate-validator client-side-validation

我有一个使用NHibernate和NHibernate.Validator的ASP.NET MVC项目,我想使用xVal 1.0(最新版本)。 我将所请求的脚本添加到项目中,并在Site.Master中引用它:

    <script type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery-1.3.2.js")%>"></script>
    <script type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery.validate.js")%>"></script>
    <script type="text/javascript" src="<%= ResolveUrl("~/Scripts/xVal.jquery.validate.js")%>"></script>

然后我将NHibernateValidatorRulesProvider添加到Global.asax Application_OnStart()中的xVal.ActiveRuleProviders:

xVal.ActiveRuleProviders.Providers.Add(new NHibernateValidatorRulesProvider(ValidatorMode.OverrideXmlWithAttribute));

最后,在View上,我补充道:

<%= Html.ClientSideValidation<DomainModel.Entities.MyCustomClass>(Prefix) %>

我在IE中获得了JavaScript警告但在Firefox中没有。如果现在输入一些无效字段并提交这些字段,则xVal不会触发 - 而是正在进行PostBack,而Serverside验证会处理数据。

我做错了什么?我已经能够使用xVal 1.0 ...

运行xVal示例项目

//编辑:我必须准确地说明:实际上发生了一些事情:它会进行回发并将无效字段标记为红色(因为它一直在进行服务器端验证)但如果我写了一些东西在这些字段中,颜色会变回正常状态。但是,如果我再次删除该值,则在我单击“提交”并且表单执行回发之前不会发生任何事情...如果我删除了clientidevalidation代码,则似乎不会发生这种情况。

2 个答案:

答案 0 :(得分:2)

解决: 我使用[Length(1,50)] - TextFields的Validator来确保它们包含一个值。但显然,xVal不会将此Validator作为例外处理:xVal允许回发,即使Fields为空。为了确保xVal检查字段是否为空,我必须选择 [NotEmpty()] 属性!

答案 1 :(得分:2)

确保您的验证器不允许空值,MVC正在验证回发中空字段的表单,但xVal可能不会在每种情况下都这样做。