ASP.NET MVC: доступ к контейнеру из EditorTemplate

#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

Вот пример проекта.

Надеюсь, это поможет.