2

我有一个这样的 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或数组表达式。

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

4

1 回答 1

0

是的,看起来 MVC 不支持这种情况。您可以提供自己的 ResourceType 类,但它必须具有返回显示字符串的静态属性(例如public static string One_Namepublic static string Two_Name在您的示例中),并且没有优雅的方法可以让它做您想做的事情。

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

于 2012-03-02T15:51:44.387 回答