MVC - динамическая загрузка частичных представлений

Я пытаюсь динамически загрузить частичные представления в представление, передавая список путей для частичных представлений, которые я хочу, и затем вызывая RenderPartial для каждого. Это, кажется, делает трюк. Проблема возникает, когда я пытаюсь передать модель в частичное представление. Поскольку я загружаю их динамически, я точно не знаю, какую модель передать для этого конкретного частичного представления. Я не хочу заполнять каждый возможный объект, и я рассматриваю возможность использования отражения с поиском конфигурации для каждого частичного представления для динамической загрузки модели. Я также рассматривал возможность добавления ActionFilter, который автоматически заполнил бы правильные значения модели для меня, но даже эта реализация должна была бы использовать Reflection. У кого-нибудь есть другие предложения?

Одна вещь, которую мне не хватает в обычных пользовательских элементах управления ASP.NET, которые я не вижу в MVC. Пользовательские элементы управления инкапсулировали свою собственную логику для извлечения данных, тогда как в MVC главный контроллер должен знать об этом. Это означает, что если бы я использовал частичное представление для другого контроллера, этот контроллер также должен был бы знать, как получить модель для этого частичного представления. Я что-то здесь упускаю? Благодарю.

2 ответа

Если вам нужна возможность делать то, что вы описываете, вам может быть интересно прочитать о Html.RenderAction (). Это полезно во многих обстоятельствах, но не является "чистым" MVC (возможно, прагматичным MVC).

У меня похожая ситуация с вами, когда я использую частичные представления для загрузки разных экранов поиска (кнопки отправки поиска одинаковы), только поля формы различны.

Я делаю это следующим образом. В обычном контроллере базового класса у меня есть параметр общего типа, который я передаю объекту модели представления (SearchObject имеет тип объекта).

public abstract class SampleController<T>  : Controller where T : new()
public virtual ActionResult SearchForDocuments()
        {
            searchModel.SearchObject = // Create type of T;
            // Some more code
            return View("SomeView", searchModel);
        }

Затем у меня есть строго типизированное представление, которое передает SearchObject в частичное представление.

 <% Html.RenderPartial(@"../Search/SearchCriteriaTemplates/" + /*Specific view name*/, Model.SearchObject); %>

Частичное представление тогда строго типизировано и знает, что делать со строго типом Model.

Создание вспомогательной функции, которая имеет логику и возвращает Partials в виде строки, может привести к тому же результату. И будет иметь больше мобильности, чем виртуальные функции, предложенные RichardOD.

Другие вопросы по тегам