如何创建具有不同资源文件的公共ViewModel?

时间:2012-03-01 06:02:37

标签: c# asp.net-mvc-3 razor internationalization resource-files

我有一个像这样的ViewModel:

public class MyViewModel
{   
   [Display(Name = "One_Name", ResourceType = typeof(Resources.User.Resource1))]
   public string One { get; set; }

   [Display(Name = "Two_Name", ResourceType = typeof(Resources.User.Resource1))]
   public string Two { get; set; }
}

用于第1页,并且当我执行以下操作时效果很好(例如撤回资源):

@Html.LabelFor(model => model.One)

但我也想在第2页上使用此ViewModel,但我不想将属性指向不同的资源文件(例如Resources.User.Resource2)。

我不想欺骗这个课程,但我会接受一些OO技巧。

问题是属性参数必须是字符串,常量,typeof或数组表达式。

解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

是的,似乎MVC似乎不支持这样的场景。您可以提供自己的ResourceType类,但它必须具有返回显示字符串的静态属性(例如示例中的public static string One_Namepublic static string Two_Name),并且没有优雅的方法可以使它执行您想要的操作

但由于Html.LabelFor没有做任何特别惊天动地的事情,你可以很容易地在视野中做。只需编写自己的<label>元素并直接获取本地化字符串,这就像调用ResourceManager.GetString一样简单。在大多数情况下,您仍然可以使用Html.LabelFor,并且只能在某些视图确实需要更改显示文本的情况下(希望很少见)编写自己的标签。