2015-05-19 5 views
2

У меня есть несколько моделей, которые содержат коды страны. Я хотел бы отобразить их с фактическим именем страны, а не только значением ISO.Преобразователь отображения значений для ASP.MVC

Так что в общем смысле у меня есть ключи в моей модели, у меня есть определение этих ключей в словаре, я хотел бы отобразить определение в пользовательском интерфейсе.

Недавно я работал в основном в WPF, там я бы создал конвертер, который я мог бы просто ссылаться на привязку пользовательского интерфейса, когда бы хотел перевести значение (даже двунаправленное). Если в ASP.MVC есть аналогичная готовая концепция, которая была бы идеальной.

В качестве альтернативы I может добавить названия стран в качестве атрибутов модели, но это чувствует себя kludgy.

Я мог бы свернуть свое собственное решение для конвертеров, но предпочел бы придерживаться лучших практик, поэтому любое руководство очень ценится.

+2

Я был бы признателен за комментарий к downvote, как я могу сделать этот вопрос лучше ? –

+0

Как насчет пользовательского атрибута, такого как «DisplayValue», который изменит отображаемое значение на основе поиска в словаре? Это будет держать ваш код DRY – Jonesopolis

+0

Не голосующий, но я буду опасаться, что это связано с отсутствием кода в вопросе. Некоторые люди не видят кода, не утруждают себя чтением вопроса и просто голосом. –

ответ

3

HtmlHelper может быть элегантным решением для вашей проблемы.

Во-первых, вы объявляете HtmlHepler так:

public static class CountryHTMLHelpers 
{ 
     //Initialize your dictionary here 
     public static Dictionary<string, string> CountryDictionary;   

     public static IHtmlString ISOToCountry(this HtmlHelper helper, string iso) 
     { 
      string countryName = CountryDictionary[iso]; 
      return new HtmlString(countryName); 
     } 

     public static IHtmlString CountryToISO(this HtmlHelper helper, string country) 
     { 
      string iso = CountryDictionary.FirstOrDefault(x => x.Value == country).Key; 
      return new HtmlString(iso); 
     } 
} 

Для использования этих помощников в своих взглядах:

@Html.ISOToCountry(Model.ISO) //Print the country 
@Html.CountryToISO("England") //Print the ISO 
+0

Спасибо, я попробую. Мне нужно будет предоставить словарь динамически, но это должно быть простым, если я могу это сделать через инъекцию зависимостей в статическом классе, это еще одна история :) –

Смежные вопросы