【问题标题】:How to validate single element in JQuery unobstrusive validation and JQuery Validate in ASP.NET MVC?如何在 ASP.NET MVC 中验证 JQuery 不显眼验证和 JQuery Validate 中的单个元素?
【发布时间】:2014-09-04 13:01:33
【问题描述】:

假设:

  1. 我的 ASP.NET MVC 5.2 中的 JQuery Unobtrusive 验证和 JQuery 验证工作正常
  2. 通常通过单击提交按钮进行的​​验证工作正常。
  3. 我正在使用 ASP.NET MVC 验证摘要来显示错误。

现在,当我尝试使用以下方法调用单个元素验证时:

form.validate().element(txtPostalCode)

出现问题:

  1. 验证失败时,验证摘要中不显示错误消息。

  2. 验证成功后,我不断收到来自非干扰验证的此错误。

Uncaught TypeError: Cannot read property 'attr' of undefined

在粗体代码中进一步挖掘:

function onSuccess(error) {  // 'this' is the form element
    var container = error.data("unobtrusiveContainer"),
        **replaceAttrValue = container.attr("data-valmsg-replace"),**

关于如何实现这一点的任何想法?基本上我想做的是验证一个元素,并在验证摘要中显示错误(如果有)。

谢谢!

【问题讨论】:

  • 只是为了澄清,你给它这样的 form.validate().element('#txtPostalCode') 而不是 form.validate().element(txtPostalCode)。对吗?
  • 是的,感谢您的关注。 txtPostalCode 是 $("#txtPostalCode") 存储在该变量中。
  • 你试过 $("#txtPostalCode").valid() 吗?但是他们都应该工作,但仍然......一击并尝试
  • 如果您有单独的验证消息,它可以工作 - 例如@Html.ValidationMessageFor(m => m.txtPostalCode)
  • 试试@Shiv 的建议。将.valid() 方法附加到元素...$("#txtPostalCode").valid()

标签: jquery asp.net-mvc jquery-validate unobtrusive-validation


【解决方案1】:

我就是这样做的。它解决了我的问题。所以基本上,

  1. 我设置了自定义 showErrors 方法以满足我的需要。
  2. 不知何故,通过执行上述第 1 点,我会破坏验证摘要中不显眼的验证的通常行为,因此我需要将设置重置为默认值。

我愿意接受更优雅的解决方案,但下面的代码适合我的需要。

谢谢!希望对您有所帮助!

var valSummary = $(".validation-summary");
var settings = $.data($('form')[0], 'validator').settings;
var ulSummary = valSummary.find("ul");
ulSummary.empty();

settings.showErrors = $.noop();
settings.showErrors = function (errorMap, errorList) {
    for (var i = 0; i < errorList.length; i++) {
        var liControl = $("<li />", {
            "text": errorList[i].message
         });

        var checkDuplicate = ulSummary.filter(function (idx, elem) {
            return $.trim($(elem).html()) === $.trim(liControl.html());
         });

        if (checkDuplicate.length === 0) {
            ulSummary.append(liControl);
        }
    }
    valSummary.show();
}

if (txtPostalCode.valid() && txtUnitNo.valid()) {
    valSummary.hide();
    RefreshValidationRules(); 
}
else {
    settings.showErrors = $.noop();
    return;
}

function RefreshValidationRules() {
    $("form").removeData("validator");
    $("form").removeData("unobtrusiveValidation");
    $.validator.unobtrusive.parse("form");
    UnsetFocusInvalid();
}

function UnsetFocusInvalid() {
    var settings = $.data($('form')[0], 'validator').settings;
    settings.focusInvalid = false;
    settings.onfocusout = $.noop();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2013-07-21
    • 2014-05-29
    • 2012-03-20
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多