如何在Razor编辑器模板中访问包含模型实例?

时间:2012-03-25 13:27:25

标签: asp.net-mvc asp.net-mvc-3 razor

我在名为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 个答案:

答案 0 :(得分:2)

您可以获取父元数据,但我认为您无法获取父模型实例:

@{
    var parentType = ViewData.ModelMetadata.ContainerType;
    var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, parentType);
}