Как я могу получить доступ к содержащемуся экземпляру модели в шаблоне редактора Razor? - PullRequest
1 голос
/ 25 марта 2012

У меня есть следующий код в шаблоне редактора с именем 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;
}

1 Ответ

2 голосов
/ 26 марта 2012

Вы можете получить родительские метаданные, но я не думаю, что вы можете получить экземпляр родительской модели:

@{
    var parentType = ViewData.ModelMetadata.ContainerType;
    var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, parentType);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...