Как я могу создать общую ViewModel с переменным файлом ресурсов? - PullRequest
2 голосов
/ 01 марта 2012

У меня есть 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)

Но я также хочу использовать эту ViewModel на странице 2 , но я не хочу указывать свойства на другой файл ресурсов (например, Resources.User.Resource2).

Я не хочу обманывать класс, но я был бы открыт для какой-то уловки.

Проблема в том, что аргументами атрибута должны быть строки, константы, typeof или выражения массива.

Как лучше всего решить эту проблему?

1 Ответ

0 голосов
/ 02 марта 2012

Да, похоже, MVC не поддерживает такой сценарий.Вы можете предоставить свой собственный класс ResourceType, но он должен иметь статические свойства (например, public static string One_Name и public static string Two_Name в вашем примере), которые возвращают отображаемые строки, и нет элегантного способа заставить его делать то, что вы хотите.

Но так как Html.LabelFor не делает ничего особенно потрясающего, вы легко можете обойтись без вида.Просто напишите свой собственный элемент <label> и получите локализованную строку напрямую, что так же просто, как вызвать ResourceManager.GetString.Вы по-прежнему можете использовать Html.LabelFor в большинстве случаев и прибегать к написанию собственных меток только в (надеюсь, редких) случаях, когда определенное представление действительно должно изменять отображаемый текст.

...