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

时间:2017-08-01 05:07:33

标签: c# asp.net-mvc kendo-asp.net-mvc unobtrusive-validation

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)

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

  

请输入小于或等于10的值。

代替,

  

长度应为1到10。

此问题仅供参考。

此问题已在此处提出。 Kendo numeric textbox range validator message

但由于同样没有接受答案,即使答案没有解释,我也会在这里添加答案。

1 个答案:

答案 0 :(得分:0)

这个问题是因为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进行空检查。