asp.net mvc验证必须是一个数字自定义错误

Par*_*ara 10 validation asp.net-mvc

我是asp.net的新手,我有一个问题.当用户在编辑器中插入除数字以外的十进制字段时,他们会收到错误"字段名称"不是数字.但我不希望他们收到此消息,我希望他们收到另一条消息.对于必需和范围验证器,我没有问题.我有什么方法可以做到这一点吗?

我没有提到改变文化只是显示另一条消息.

谢谢.

And*_*ich 13

希望我理解你的,改变RangeValidator ErrorMessage初始化ErrorMessage参数:

[Range(0, 100, ErrorMessage = "Some another error message insert here!")]
[RegularExpression("\d", ErrorMessage = "!!!")]
public decimal DecimalField { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 不,我可以修改范围验证器的错误消息,但如果用户在字段中插入"abc",我会得到一种不同的错误消息.如果他输入101,则显示这种情况下的范围错误. (2认同)
  • 我认为RegularExpression验证器可以帮助您.检查上面的答案. (2认同)

Par*_*ara 6

这是实际的答案:

创建一个类CustomClientDataTypeModelValidatorProvider.从MVC源复制代码.更改方法MakeErrorString以输出适当的消息,如下所示:

private static string MakeErrorString(string displayName)
{
    return string.Format(
        CultureInfo.CurrentCulture, 
        Core.Resources.Errors.EroareNuENr, 
        displayName);
}
Run Code Online (Sandbox Code Playgroud)

我找不到一种方法来复制代码只是扩展它,因为它使用这种静态方法.如果有人知道这个,请告诉我.

然后,在global.asax中,我写了这个:

var cdProvider = ModelValidatorProviders.Providers.SingleOrDefault(p => p.GetType().Equals(typeof(ClientDataTypeModelValidatorProvider)));
            if(cdProvider != null)
            {
                ModelValidatorProviders.Providers.Remove(cdProvider);
                ModelValidatorProviders.Providers.Add(
                        new CustomClientDataTypeModelValidatorProvider());
            }
Run Code Online (Sandbox Code Playgroud)

所以流实际上会路由到我的类而不是asp.net MVC dll中的类

我从这里得到了这个想法: