我有一个jquery验证规则
$.validator.addMethod("hexcolor", function (value, element) {
return this.optional(element) || /^(#){1}([a-fA-F0-9]){6}$/.test(value);
}, "Please insert a valid hex color (#______)");
$.validator.unobtrusive.adapters.add("hexcolor", function (options) {
options.rules['hexcolor'] = options.params;
options.messages['hexcolor'] = options.message;
});
在Html上,我像这样绑定验证
@Html.TextBoxFor(p => p.Color, new { data_val = "true", data_val_hexcolor = "Html Error message" })
@Html.ValidationMessageFor(p => p.Color)
当输入无效时,我总是得到“Html错误消息”作为错误消息,而不是插件的“请插入有效的十六进制颜色(#______)”
如何获取插件的错误消息?
答案 0 :(得分:1)
不太确定你在这里尝试做什么,但你明确地将验证消息设置为data_val_hexcolor的值:
options.messages['hexcolor'] = options.message;
发送到适配器的选项的message属性包含data_val_ [rulename]属性的值。
这通常是您在ASP.NET MVC中所需要的,因为它允许您像在此处一样从服务器设置验证消息,而不是在Javascript中:
@Html.TextBoxFor( ... data_val_hexcolor = "Html Error message" })
您可以通过完全删除options.messages['hexcolor']
的分配来忽略从服务器发送的消息,或者您可以通过以下方式替换该行:
// Only add view defined message if not empty:
if (options.message)
{
options.messages['hex_color'] = options.message;
}
...然后将data_val_hexcolor设置为视图中的空字符串(显然,您无法删除该属性,因为它是触发验证规则的属性的存在):
@Html.TextBoxFor( ... data_val_hexcolor = "" })