模型属性的自定义ErrorMessage仅在生产环境中不显示

时间:2015-04-13 12:16:34

标签: asp.net-mvc asp.net-mvc-3 data-annotations production-environment culture

我正在开发ASP.NET MVC3应用程序。

我对我的模型的某些属性使用DataAnnotations,如果输入不正确,则会显示自定义错误消息 但是,当我在localhost中运行我的应用程序时,它完全有效,但是当我将它放在我的网络服务器(这是一个共享的Web服务器)上时,默认情况下会出现错误消息。

以下是一个例子:

[Required]
[Range(1d, 1000d, ErrorMessage = "My custom error message in French")]
public decimal Surface { get; set; }

当用户输入" abcde"在Surface字段中,我有以下错误消息:

  

字段Surface必须是数字。

但是,它应该显示指定的ErrorMessage。这适用于localhost,但不适用于我的网络服务器。

我试图强迫web.config中的文化如下:

<globalization culture="fr-FR" uiCulture="fr-FR"/>

但这不起作用。

如何强制应用程序显示ErrorMessage
我无法修改托管我的应用的网络服务器上的任何内容,它是托管在本地网站上的个人项目。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

正如斯蒂芬·穆克(Stephen Muecke)写的那样#abcde&#34;无法解析为小数,因此它显示了一般错误&#34;字段Surface必须是数字&#34;。

要在自定义消息中生成错误消息,您需要检查输入是否为数字/小数,并且可以使用正则表达式执行此操作。更改您的代码如下

[Required]
[RegularExpression(@"^\d+.\d{0,2}$",ErrorMessage = "custom error in your language")]// add this extra line
[Range(1d, 1000d, ErrorMessage = "My custom error message in French")]
public decimal Surface { get; set; }

您需要添加以下行

[RegularExpression(@"^\d+.\d{0,2}$",ErrorMessage = "custom error in your language")]

通过正则表达式检查它是否是一个数字,它还会检查小数点,如果它们大于2,如2.002,那么它也会给出错误。您可以查看正则表达式来构建另一个最适合您的表达式。