我是asp.net的新手,我遇到了问题。当用户在编辑器中插入除数字以外的十进制字段时,他们会收到错误“字段名称”不是数字。但我不希望他们收到此消息,我希望他们收到另一条消息。对于必需和范围验证器,我没有问题。 我有什么方法可以做到这一点吗?
我并没有提到改变文化只是显示另一条消息。
感谢。
答案 0 :(得分:13)
希望我理解您,更改RangeValidator
ErrorMessage
只需初始化ErrorMessage
参数:
[Range(0, 100, ErrorMessage = "Some another error message insert here!")]
[RegularExpression("\d", ErrorMessage = "!!!")]
public decimal DecimalField { get; set; }
答案 1 :(得分:6)
这是实际答案:
创建一个班级CustomClientDataTypeModelValidatorProvider
。从MVC源复制代码。更改方法MakeErrorString
以输出适当的消息,如下所示:
private static string MakeErrorString(string displayName)
{
return string.Format(
CultureInfo.CurrentCulture,
Core.Resources.Errors.EroareNuENr,
displayName);
}
我找不到一种方法来复制代码只是扩展它,因为它使用这种静态方法。 如果有人知道,请告诉我。
然后,在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());
}
这样流程实际上会路由到我的类而不是asp.net MVC dll中的类
我从here获得了这个想法:
答案 2 :(得分:2)
不幸的是,这不是一项微不足道的任务。但是你可以尝试以下hack ... 最好只在基本字段上执行此操作,因为这是需要维护的更多代码。
在控制器的动作方法
中if(ModelState.IsValid)
{
// code
}
else
{
if (ModelState["YourField"].Errors.Count > 0)
{
ModelState["YourField"].Errors.Clear();
ModelState.AddModelError("YourField", "Your custom message here");
}
// code
}
答案 3 :(得分:2)
您可以将ClientDataTypeModelValidatorProvider类的ResourceClassKey
设置为包含FieldMustBeNumeric
键的全局资源的名称,以使用您的自定义消息替换数字的mvc验证错误消息。此日期验证错误消息的关键是FieldMustBeDate
。
ClientDataTypeModelValidatorProvider.ResourceClassKey="MyResources"; // MyResource is my global resource
有关如何将MyResources.resx
文件添加到项目中的详细信息,请参阅此处:
The field must be a number. How to change this message to another language?
答案 4 :(得分:1)
要更改服务器端验证后获得的错误消息,您需要更改资源文件中的“PropertyValueInvalid”键,并将资源文件名分配给DefaultModelBinder.ResourceClassKey
。有关详细信息,请参阅此问题:localize default model validation in mvc 2
答案 5 :(得分:1)
在本页末尾寻找解决方案:
我在我的MVC 3 RTM项目中检查过它,效果很好。
答案 6 :(得分:1)
答案 7 :(得分:0)
答案 8 :(得分:0)
似乎自从Para的回答MVC发展以来,现在ClientDataTypeModelValidatorProvider接受了ResourceClassKey属性。它使用资源类中指定的FieldMustBeNumeric和FieldMustBeNumeric消息。
答案 9 :(得分:0)
一种用于自定义 RangeValidator 的快速,简单的技巧 ErrorMessage -““字段名称”不是数字”-使用正则表达式
[Range(0.5, 1000, ErrorMessage = "Amount should be in range {1} to {2}.")]
[DataType(DataType.Currency)]
[RegularExpression(@"\d", ErrorMessage = "Amount is not valid.")]
public decimal Amount{ get; set; }