mvc3提示System.InvalidOperationException

时间:2012-07-05 16:13:02

标签: c# asp.net-mvc-3 internationalization data-annotations

我在mvc3模型中使用存储在App_GlobalResources文件夹中的resx文件和DataAnnotations进行翻译。

它适用于Required DataAnnotation,但如果我尝试使用Display DataAnnotation,它就不再有用了。

这是我的代码:

[Required(ErrorMessageResourceType = typeof(Resources.Error), ErrorMessageResourceName = "RequiredClientName")]
[Display(Prompt = "ClientName", ResourceType = typeof(Resources.Front))]
public string Name { get; set; }

只有在我放置System.InvalidOperationException

时才会抛出Display DataAnnotation

以下是完整的例外情况(对不起,我没有找到用英语翻译的方法):

  

Impossiblederécupérerlapropriété'Prompt'enraison de l'échecde   本地化。 Le type'Infrance.Front'n'est pas public ou ne   contient pasunepropriétédechaînestatiquepublique avec le nom   'FooterAbout'。

     

描述:Une例外非gérées'estproduite au moment de   l'exécutiondelarequêteWebactuelle。 Contrôlezlatrace de la pile   pour plus d'informations sur l'erreur et son origine dans le code。

     

Détailsdel'exception:System.InvalidOperationException:不可能   derécupérerlapropriété'Prompt'enraison de l'échecdela   本土化。 Le type'Infrance.Front'n'est pas public ou ne   contient pasunepropriétédechaînestatiquepublique avec le nom   'FooterAbout'。

我使用的模型存储在Area中。 另外,我可以从_LayoutRequired DataAnnotation

访问我的resx文件中的值

感谢您的帮助

弗洛朗。

1 个答案:

答案 0 :(得分:1)

错误信息非常自我解释(我正在为该网站的非法语听众翻译):

  

无法检索属性“提示”,因为本地化失败。类型   'Resources.Front'不公开或不包含公共静态   名为“ClientName”的字符串属性。

您应该通过在RESX文件的属性中将自定义工具设置为PublicResXFileCodeGenerator并将构建操作设置为Embedded Resource来公开资源文件:

enter image description here

原因是因为默认情况下生成的强类型类是内部的,Razor视图无法访问这些视图,这些视图在运行时被编译为单独的程序集。