我使用 Razor 在 ASP.NET MVC 3 中有一个应用程序。我在文本框中设置了一些data annotations以及jQuery validation and unobtrusive validation。
问题是,某些字段使用普通的旧版香草JavaScript进行自定义验证逻辑,如下面的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()
,BookingValidation()
是其中的函数 根据其他一些验证返回true
或false
逻辑。
这是我提交按钮的代码。
@using (Html.BeginForm(MVC.Booking.Actions.AtWork(model: null), FormMethod.Post,
new {@onsubmit = "return Validation()" }))
{
@Html.Partial("_BookingView")
}
此方法适用于除IE-7/8之外的所有浏览器。
答案 0 :(得分:1)
您可以尝试将jQuery.Validate.min.js和jquery.validate.unobtrusive.min.js文件更新到最新版本......可能是这些文件已经老了...我有同样的问题一些时间回来并通过执行此更新来修复它。
答案 1 :(得分:1)
我最近遇到了同样的问题..并制定了以下解决方案: 而不是在“onsubmit”事件形式中作为单独/第二个提交处理程序提供额外的表单验证(除了不显眼的mvc 3验证),您应该在mvc3的主要不显眼验证过程中“注入”您的附加验证功能..让它照顾其余的。
在常用的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函数的名称,它负责您的额外验证并返回布尔结果以验证成功或失败。
在表单中,删除您提供的“onsubmit”处理程序,向表单添加一个不可见的虚拟文本字段,并应用您创建的自定义不显眼验证适配器/规则,如下所示:
@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的相同不显眼的验证流程中注入了额外的验证,而不是创建第二个验证流程。此外,对于为所有自定义客户端验证工作创建自定义数据注释(验证)的未来改进也是如此。