asp.net-mvc - Unobtrusive Validation 消息不适用于没有 name 属性的输入

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

我们的信用卡处理器 (Braintree Payments) 要求我们不要在信用卡字段(卡号、到期日期和 CCV)上使用“名称”属性,以确保它们不会以未加密的方式发布到服务器。我找到了一个自定义扩展来生成一个无名文本框( How to extend html.textboxfor to remove the name attribute? )。这很好用,因为它允许我们生成一个没有 name 属性的文本框,但它仍然会自动添加所有其他验证属性等。但我遇到了一个问题。

当我使用 @Html.NameLessTextBoxFor(model => model.CardNumber)在我看来,它正确地生成了没有 name 属性的文本框。我们还在 View 模型中使用数据注释来生成不显眼的验证。实际网站上的可见问题是,当这些无名称字段之一出现验证错误时,ValidationMessage 跨度不会显示任何错误消息。无名称字段正确变为红色,但不显示错误消息。

我相信我已经推断出为什么这不起作用,但我不知道如何解决它。我查看了为 ValidationMessage 跨度生成的 HTML,我看到了这个属性:

data-valmsg-for="MyViewModel.CardNumber"

如果我的无名称字段的 name 属性设置为正常,那将是正确的。但是由于我无法设置 name 属性,如何让 ValidationMessage 仍然有效?

最佳答案

在提交时擦洗名称属性将类似于:

$("form").submit(function () {
    $(this.find(":input").removeAttr("name");
});

不过,这可能在事件链中为时已晚,因此您可能必须阻止默认并重新发布表单,如下所示:
$("form").submit(function (e) {
    if($(this.find(":input[name]").length > 0) {
        e.preventDefault();
        $(this.find(":input").removeAttr("name");
        $(this).trigger("submit");
    }
});

或者确实像我一样将回调编码为不显眼的验证,以检查验证是否已通过,然后删除名称属性。这是我关于添加回调的笔记:
//Added the following to the onErrors function:
    if ($.isFunction(callBackOnError)) {
        setTimeout(function () {
            callBackOnError();
        }, 100);
    }
//Then in the exposing declarative section of the plugin
    onError: function (callBack) {
        callBackOnError = callBack;
    }

玩玩它,看看你会发现什么。渴望知道你的最终结论,所以请更新。希望这对您有所帮助。

关于asp.net-mvc - Unobtrusive Validation 消息不适用于没有 name 属性的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15979842/

相关文章:

asp.net-mvc-3 - 在 MVC3 中扩展不显眼的 javascript 以向 div 客户端添加样式的最佳方法

javascript - 使用不显眼的验证插件时,如何禁用 1 个特定 html 元素的 keyup 和 focusout 上的 jquery 验证?

ASP.NET Web Api - "PATCH"使用 Delta<...> 且双属性不起作用

javascript - 如何修复未定义的错误 "Cannot read property ' call'。检查element时发生异常,检查 'rules'方法”?

c# - 来自另一个模型的 MVC 显示属性

javascript - 检查表单验证是否正确

javascript - jquery 图像验证不适用于数组

jquery - 当选择更改时,如何显示下拉菜单的不显眼的 jQuery 验证消息?

javascript - 如何进行 AJAX 调用

asp.net - @model 到底做了什么?