ASP.NET MVC:从EditorTemplate访问容器

时间:2016-10-20 22:30:13

标签: asp.net-mvc mvc-editor-templates modelmetadataprovider asp.net-mvc-uihint

我有一个包含以下属性的视图模型 AssetFreezeViewModel.cs

public AssetFreezeAccountBalanceViewModel AccountBalanceInfo { get; set; }

基于上面的ViewModel,我有一个 Details.cshtml 视图:

@Html.EditorFor(x => x.AccountBalanceInfo)

在\ Views \ Shared \ EditorTemplates \中,我有一个模板 AssetFreezeAccountBalanceViewModel.cshtml ,其名称与AccountFalanceInfo的类型相同,即AssetFreezeAccountBalanceViewModel(按惯例)

在那个EditorTemplate中,我有:

@Html.EditorFor(model => model.DeviseId)

AssetFreezeAccountBalanceViewModel.cs 中,我有:

[UIHint("DropDownList")]
public Int16? DeviseId { get; set; }

public IEnumerable<SelectListItem> DeviseIdList { get; set; }

最后,在\ Views \ Shared \ EditorTemplates \我有 DropDownList.cshtml (按惯例应用于DeviseId):

@model dynamic
@{
    var propertyNameLookup = this.ViewData.ModelMetadata.PropertyName + "List";
    var property = this.ViewData.ModelMetadata.Container.GetType().GetProperty(propertyNameLookup);
...
}

当代码点击@ Html.EditorFor(model =&gt; model.DeviseId)时,我们输入DropDownList.cshtml,其中容器为空然后崩溃。

如何从该视图中向下2级的EditorTemplate访问Container(= parent)?

1 个答案:

答案 0 :(得分:0)

我刚刚在@model AssetFreezeAccountBalanceViewModel

的顶部添加了AssetFreezeAccountBalanceViewModel.cshtml

这是sample project

希望有所帮助。