我尝试使用VS2013在MVC 5项目中创建自定义数据注释验证属性(NameValidationAttribute)。我能够成功添加客户端验证,并且一旦焦点离开文本框,就会显示自定义验证的错误消息。但是,[Required]和[Range]验证器等标准属性现在没有显示正确的错误消息,“警告:没有为'field'定义消息'(参见下面的屏幕截图)。
问题: - 为什么标准验证错误消息显示为“警告:没有为UnitsInStock定义消息”?我错过了什么?
以下是我的自定义客户端验证脚本:
我在EditProducts页面中包含了以下脚本。
请注意,UnitPrice,UnitsInStock和ReorderLevel字段的错误消息是使用范围验证属性定义的(见下文)。
仅供参考,我尝试更改ProductEdit页面中脚本的顺序,但仍显示相同的消息。
请指教!
答案 0 :(得分:0)
我遇到了这个问题。我创建了一个名为PasswordAttribute的MVC属性,其客户端验证器名为' password'。
$.validator.addMethod('password', function (value, element, params) {
...[validation logic]
});
$.validator.unobtrusive.adapters.addBool('password');
只要我将此逻辑添加到解决方案中,我就会收到您在Password和ConfirmPassword字段中看到的错误。请注意,这是在使用属性之前发生的。只需将客户端验证器重命名为' passwordcheck'解决了这个问题。我最初认为这个名字是密码'可能与其中一个预定义的验证人发生冲突(参见jQuery Validation Documentation),但事实并非如此。我怀疑它现在与某些输入字段属性的名称或值发生冲突。无论如何,解决方案只是重命名验证器。
答案 1 :(得分:0)
jQuery unobtrusive need data-msg
用于默认验证消息。
这是如何将模型中的动态错误消息应用于Html
$.validator.unobtrusive.adapters.add("requireif", function (options) {
$('#' + options.element.id).attr("data-msg", options.message);
// Add rule ...
});
您可以更改默认警告消息。
$.validator.addMethod("requireif", function (value, element, pair) {
// validate logic
return true/false;
}, "YOUR DEFAULT MESSAGE HERE");
或者
@Html.TextBoxFor(m => m.Property1, new { Class = "form-control", data_msg = "YOUR DEFAULT MESSAGE HERE" })
或者你可以直接把它直接放到你的Html上。
<input class="form-control" data-msg="YOUR DEFAULT MESSAGE HERE"/>