У меня есть следующий код в шаблоне редактора с именем DropDown
, который я вызываю с помощью UIHint
.
if (ViewData.ModelMetadata.AdditionalValues.ContainsKey("TemplateControlParameters"))
{
var cparms = (Dictionary<string, object>)ViewData.ModelMetadata.AdditionalValues["TemplateControlParameters"];
var listName = cparms["SelectListName"].ToString();
list = (SelectList)ViewData[listName];
}
Параметр управления SelectListName должен указывать на свойство SelectList
внешней модели, то есть модели, которая содержит свойство, редактируемое этим шаблоном.Тем не менее, я не могу найти способ ссылки на содержащий экземпляр модели, только содержащий тип модели.Как получить доступ к экземпляру модели, для которой вызывается этот шаблон?
CLOSEST SOLUTION: Я создал производный класс Controller, который переопределяет View(string viewName, string masterName, object model)
и внедряет выбор модели представлениясписок словаря (IDictionary<string, SelectList>
) в просмотр данных:
protected override ViewResult View(string viewName, string masterName, object model)
{
var result = base.View(viewName, masterName, model);
if ((model is ViewModelBase) && (!ViewData.ContainsKey(SelectListsViewDataKey)))
{
var vm = (ViewModelBase)model;
result.ViewData.Add(SelectListsViewDataKey, vm.GetSelectLists());
}
return result;
}