2009-08-10 2 views
2

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

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

ответ

4

Если вы хотите сделать то, что вы описали, вам может быть интересно узнать о 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); %> 

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

+0

Я видел ваш код, но не понимаю поток. так что бы вы опубликовали небольшой полный рабочий пример кода. благодаря – Thomas

1

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

Смежные вопросы