我有一个像这样的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
或数组表达式。
解决此问题的最佳方法是什么?
答案 0 :(得分:0)
是的,似乎MVC似乎不支持这样的场景。您可以提供自己的ResourceType类,但它必须具有返回显示字符串的静态属性(例如示例中的public static string One_Name
和public static string Two_Name
),并且没有优雅的方法可以使它执行您想要的操作
但由于Html.LabelFor
没有做任何特别惊天动地的事情,你可以很容易地在视野中做。只需编写自己的<label>
元素并直接获取本地化字符串,这就像调用ResourceManager.GetString
一样简单。在大多数情况下,您仍然可以使用Html.LabelFor
,并且只能在某些视图确实需要更改显示文本的情况下(希望很少见)编写自己的标签。