asp.net-mvc-3 - 在IE7和IE8中,ASP.NET 3为什么不谨慎的MVC验证?

  显示原文与译文双语对照的内容

我使用英镑的Razor 在 ASP.NET MVC中应用了。 我已经在文本框上设置了一些数据注释以及 jQuery验证和低调验证工具。

事情是,某些字段使用普通的古老的( 如下面的functions ) 有自定义的验证逻辑。


function Validation() {


 var signUp = SignUpValidation();


 var book = BookingValidation();


 if (signUp && book) {


 return true;


 }


 else 


 {


 ShowErrorMessage();


 return false;


 }


}



function ShowErrorMessage()


{


 $('span#ErrorMessage').html('These fields are required');


}



其中,SignUpValidation() 是函数,它基于其他验证逻辑返回或者 false

这是我的提交按钮代码。


@using (Html.BeginForm(MVC.Booking.Actions.AtWork(model: null), FormMethod.Post, 


new {@onsubmit ="return Validation()" }))


{


 @Html.Partial("_BookingView")


}



除了 ie-7/8 以外,这种方法在所有浏览器中都。

时间: 原作者:

我最近遇到了同样的问题。 并编制了以下解决方案: 不要在表单事件中以单独/第二个提交处理程序作为单独/第二个提交处理程序,而是在mvc3的主要unobtrusive验证过程中"插入"附加验证功能。 让它来处理剩下的。

在常见的javascript代码/文件中创建自定义验证适配器:


(function ($) {


 if($.validator && $.validator.unobtrusive) { 


 $.validator.unobtrusive.adapters.addBool("AdditionalFormValidation");


 }


} (jQuery));



在你的视图文件中,添加这里代码,为你在上面的常见文件中定义的自定义验证器适配器创建新的jquery验证器方法:


(function ($) {


 if ($.validator) {


 $.validator.addMethod("AdditionalFormValidation", function (value, element) {


 return Validation();


 });


 }


 } (jQuery));



这里-"additionalformvalidation"是验证器方法名,与你的自定义验证适配器相同。 -"验证"是javascript函数的名称,它负责附加验证,并为验证successs或者失败返回一个布尔值结果。

你可以将你所提供的"onsubmit"处理程序删除,并向表单添加一个不可见的虚拟文本字段,并应用你创建的自定义unobtrusive验证适配器/规则,如下所述:


@using (Html.BeginForm(MVC.Booking.Actions.AtWork(model: null), FormMethod.Post)) 


{ 


@Html.Partial(MVC.Booking.Views._BookForAtWork) 


<input type="text" style="visibility:hidden; width: 1px; height: 1px;" name="hiddenValidation" id="hiddenValidation" data-val="true" data-val-AdditionalFormValidation/>


} 



这个解决方案对我来说很有用。 对于我来说,如果在mvc3的相同验证流中注入附加验证,而不是创建第二个验证流,那么。 另外,为所有定制客户端验证工作创建定制数据注释( 验证) 也是 inline的未来改进。

...