我在名为 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
“外部”模型的属性,即包含此模板正在编辑的属性的模型。但是,我找不到引用包含模型实例的方法,只能引用包含模型类型。如何访问正在调用此模板的模型实例?
最接近的解决方案:我创建了一个重写 View(string viewName, string masterName, object model)
的派生 Controller 类。并将 View 模型的选择列表字典 ( IDictionary<string, SelectList>
) 注入(inject) View 数据中:
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;
}
最佳答案
您可以获取父元数据,但我认为您无法获取父模型实例:
@{
var parentType = ViewData.ModelMetadata.ContainerType;
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, parentType);
}
关于asp.net-mvc - 如何访问 Razor 编辑器模板中包含的模型实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9860477/