Рассматривали ли вы использование HTML-помощников?
У меня есть некоторые статические переменные словаря в нашем классе, которые имеют дело с кэшированием словаря, поэтому нам не нужно извлекать список стран (вот что такое countryDictionaryниже) каждый раз при отображении выпадающего списка.
public static MvcHtmlString CountrySelectFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string emptyText, object htmlAttributes)
{
SelectListItem[] SingleEmptyItem = new[] { new SelectListItem { Text = emptyText != null ? emptyText : "", Value = "" } };
return htmlHelper.DropDownListFor(expression, emptyText != null ? SingleEmptyItem.Concat(new SelectList(countryDictionary, "Key", "Value")) : new SelectList(countryDictionary, "Key", "Value"), htmlAttributes);
}
Отсюда, после регистрации пространства имен, в которое вы помещаете свой HTML Helper, вы можете использовать:
<%: Html.CountrySelectFor(model => Model.HeadOffice.CountryId) %>
Только для справкиВот фрагмент кода для countryList.Строки «Кэширование» ниже для вас не будут существовать, это некоторые пользовательские классы, которые мы создали для управления кешем приложений.
private static Dictionary<int, string> countryList
{
get
{
IList<Models.Country> countries = Caching.HTTPCache.Get(Caching.Common.CountryCacheName) as IList<Models.Country>;
if (countries == null)
{
countries = Models.Country.Get(); //Loads all countries from the DB
Caching.HTTPCache.Add(Caching.Common.CountryCacheName, countries , new TimeSpan(0, 0, Caching.Common.CountryCacheDuration, 0, 0)); //Adds the results to the cache
}
return countries .ToDictionary(t => t.CountryId, t => t.CountryName);
}
}