2012-03-25 43 views
1

我在一个名为DropDown的编辑器模板中有以下代码,我用UIHint调用该代码。如何在Razor编辑器模板中访问包含模型实例?

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性质,即包含由该模板被编辑的属性模型。但是,我无法找到引用包含模型实例的方法,只能找到包含的模型类型。我如何访问该模板被调用的模型实例?

最接近的解决方案:我已经创建了覆盖View(string viewName, string masterName, object model)并注入视图模型的选择列表字典(IDictionary<string, SelectList>)到视图中的数据派生Controller类:

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; 
} 

回答

2

你可以得到母公司的元数据,但我不要以为你可以得到父模型实例:

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

是的,我认为最好的最终解决是包括在一个更相关的'SelectList'参考COM在视图模型中表示外键的plex类型。在此之前,我已在上述编辑中实施了解决方法。 – ProfK 2012-03-28 04:11:41

相关问题