Kendo 数字文本框的范围验证不采用默认消息

Range validation for Kendo numeric text box does not take default message

Kendo 数字文本框的范围验证,即使指定了相同的内容也不会显示自定义消息。

Range数据标注是这样定义的

[Required(ErrorMessage = "Enter length")]
[Range(1, 10, ErrorMessageName = "{0} should be from {1} to {2}")]
public int Length { get; set; }

Razor 标记是,

@Html.Kendo().NumericTextBoxFor(m => m.Length)

但是,验证消息仍然显示为,

Please enter a value less than or equal to 10.

而不是

Length should be from 1 to 10.


此题仅供参考

这里已经有人问过这个问题了。 Kendo numeric textbox range validator message

但由于同样没有公认的答案,甚至答案都没有解释,我会在这里添加答案。

这个问题是因为 Kendo 覆盖了文本框的输入类型,并且还为 Kendo 验证器添加了不同的消息,即 Kendo 覆盖以进行不显眼的验证,即使您不是使用它。

要解决此问题并实现通用 Range 属性,我必须设置自定义属性并将其注册为 Range 适配器。

在global.asax,

DataAnnotationsModelValidatorProvider.RegisterAdapter(
 typeof(RangeAttribute),
 typeof(CustomRangeAttributeAdapter));

我必须在我的自定义验证命名空间中这样定义 CustomRangeAttributeAdapter

public class CustomRangeAttributeAdapter : RangeAttributeAdapter
    {
        public CustomRangeAttributeAdapter(ModelMetadata metadata,
                                          ControllerContext context,
                                          RangeAttribute attribute)
               : base(metadata, context, attribute)
        {
            attribute.ErrorMessageResourceName = <Resource_Name_Here>;
            attribute.ErrorMessageResourceType = typeof(<Resource_File_Name>);
            metadata.DataTypeName = DataType.Currency.ToString();
        }
    } 

我必须设置 DataType 以确保它不采用默认类型。在此之后,您可以按原样使用 Range 属性。如果您需要显示自定义消息,请对 ErrorMessageErrorMessageName.

进行空检查