0

我在ASP.NET MVC 3中有一个使用Razor的应用程序。我在文本框上设置了一些数据注释以及jQuery 验证和不显眼的验证

问题是,某些字段使用普通的老式原生 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()是返回truefalse基于某些其他验证逻辑的函数。

这是我提交按钮的代码。

@using (Html.BeginForm(MVC.Booking.Actions.AtWork(model: null), FormMethod.Post, 
new {@onsubmit = "return Validation()" }))
{
    @Html.Partial("_BookingView")
}

这种方法适用于除 IE-7/8 之外的所有浏览器。

4

2 回答 2

1

您可以尝试将您的 jQuery.Validate.min.js 和 jquery.validate.unobtrusive.min.js 文件更新到最新版本...可能是这些文件很旧...我有同样的问题前一段时间通过执行此更新修复它。

于 2012-06-28T15:50:20.040 回答
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 的同一个不显眼的验证流程中注入了额外的验证,而不是创建第二个验证流程。此外,为所有自定义客户端验证工作创建自定义数据注释(验证)的未来改进也是内联的。

于 2012-06-28T19:29:05.413 回答