2012-03-25 82 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