asp.net-mvc - 如何访问 Razor 编辑器模板中包含的模型实例?

标签 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 “外部”模型的属性,即包含此模板正在编辑的属性的模型。但是,我找不到引用包含模型实例的方法,只能引用包含模型类型。如何访问正在调用此模板的模型实例?

最接近的解决方案:我创建了一个重写 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/

相关文章:

sql - 如何在内容类型中最好地集成现有数据库数据

javascript - Angular ng-include 不适用于 Razor 页面

asp.net-mvc - 如何将索引应用于 IEnumerable 表达式类型并在 razor View 中并排显示数据

asp.net-mvc-3 - 在 ASP.NET MVC 3 View 中呈现 System.Drawing.Image 的最佳方式

c# - 如何在 View 页面上显示捕获异常消息?

asp.net-mvc-3 - nop commerce automapper 异常,缺少类型映射配置或不受支持的映射

asp.net-mvc - SignalR 无法从外部程序集找到集线器

asp.net-mvc-3 - DateTime 属性的 MVC3 默认值

asp.net-mvc - Ninject 与 MembershipProvider |角色提供者

razor - 如何将异步值分配给 Razor 组件 [参数] 属性?