#asp.net-mvc #mvc-editor-templates #modelmetadataprovider #asp.net-mvc-uihint
#asp.net-mvc #mvc-editor-templates #modelmetadataprovider #asp.net-mvc-uihint
Вопрос:
У меня есть модель представления AssetFreezeViewModel.cs, которая содержит следующее свойство :
public AssetFreezeAccountBalanceViewModel AccountBalanceInfo { get; set; }
У меня есть представление Details.cshtml, основанное на ViewModel выше с этой строкой :
@Html.EditorFor(x => x.AccountBalanceInfo)
В Views SharedEditorTemplates у меня есть шаблон AssetFreezeAccountBalanceViewModel.cshtml, имя которого совпадает с типом AccountBalanceInfo, который является AssetFreezeAccountBalanceViewModel (по соглашению)
В этом EditorTemplate у меня есть :
@Html.EditorFor(model => model.DeviseId)
В AssetFreezeAccountBalanceViewModel.cs у меня есть :
[UIHint("DropDownList")]
public Int16? DeviseId { get; set; }
public IEnumerable<SelectListItem> DeviseIdList { get; set; }
Наконец, в ViewsSharedEditorTemplates У меня есть DropDownList.cshtml (применяется к DeviseId по соглашению) :
@model dynamic
@{
var propertyNameLookup = this.ViewData.ModelMetadata.PropertyName "List";
var property = this.ViewData.ModelMetadata.Container.GetType().GetProperty(propertyNameLookup);
...
}
Когда код попадает в @Html.EditorFor(модель => model.DeviseId) , мы вводим DropDownList.cshtml , где Контейнер равен null, после чего происходит сбой.
Как я могу получить доступ к контейнеру (= родительскому) из этого EditorTemplate, который находится на 2 уровня ниже от его представления?
Комментарии:
1. В верхней части AssetFreezeAccountBalanceViewModel.cshtml есть ли у вас @model AssetFreezeAccountBalanceViewModel?
Ответ №1:
Я только что добавил @model AssetFreezeAccountBalanceViewModel
в верхней части AssetFreezeAccountBalanceViewModel.cshtml
Вот пример проекта.
Надеюсь, это поможет.