MVC自定义属性 - 客户端验证 - 警告:没有为“字段”定义消息

时间:2015-03-12 20:44:46

标签: validation visual-studio-2013 asp.net-mvc-5 data-annotations custom-attributes

我尝试使用VS2013在MVC 5项目中创建自定义数据注释验证属性(NameValidationAttribute)。我能够成功添加客户端验证,并且一旦焦点离开文本框,就会显示自定义验证的错误消息。但是,[Required]和[Range]验证器等标准属性现在没有显示正确的错误消息,“警告:没有为'field'定义消息'(参见下面的屏幕截图)。

问题: - 为什么标准验证错误消息显示为“警告:没有为UnitsInStock定义消息”?我错过了什么?

enter image description here

以下是我的自定义客户端验证脚本: enter image description here

我在EditProducts页面中包含了以下脚本。

enter image description here

请注意,UnitPrice,UnitsInStock和ReorderLevel字段的错误消息是使用范围验证属性定义的(见下文)。

enter image description here

仅供参考,我尝试更改ProductEdit页面中脚本的顺序,但仍显示相同的消息。

请指教!

2 个答案:

答案 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"/>