我们的信用卡处理商(Braintree Payments)要求我们不要在信用卡字段(卡号,到期日期和CCV)上使用“名称”属性,以明确确保他们不会未加密地发布到服务器。我找到了一个自定义扩展来生成无名称文本框(How to extend html.textboxfor to remove the name attribute?)。这很有用,因为它允许我们生成一个没有name属性的文本框,但它仍然会自动添加所有其他验证属性。但我遇到了一个问题。
当我在视图中使用@Html.NameLessTextBoxFor(model => model.CardNumber)
时,它会正确生成没有name属性的文本框。我们还在View Model中使用Data Annotations来生成不引人注目的验证。实际网站上的可见问题是,当其中一个无名字段存在验证错误时,ValidationMessage范围不会显示任何错误消息。无名字段正确变为红色,但不显示错误消息。
我相信我已经推断为什么这不起作用,但我无法弄清楚如何修复它。我查看了生成的ValidationMessage范围的HTML,我看到了这个属性:
data-valmsg-for="MyViewModel.CardNumber"
如果我的无名字段的name属性设置为normal,那将是正确的。但由于我无法设置name属性,如何让ValidationMessage仍然有效?
答案 0 :(得分:0)
在提交时刷新名称attrributes将类似于:
$("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");
}
});
或者确实像我一样,将callBack编码为不显眼的验证,以检查验证是否已通过,并在 点删除名称属性。以下是关于添加callBack的说明:
//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;
}
玩弄它,看看你发现了什么。热衷于了解您的最终结论,请进行更新。希望这对你有所帮助。