RenderAction RenderPartial - PullRequest
       12

RenderAction RenderPartial

46 голосов
/ 05 апреля 2009

Из того, что я понял, есть большая разница между Html.RenderPartial, включенным в релиз ASP.NET MVC, и HTML.RenderAction в Microsoft.Web.Mvc.ViewExtensions, включенным в MVC Futures.

В моем приложении много страниц, составленных из множества "виджетов" (вроде), каждый из которых имеет свою особую функцию.

Мне показалось более разумным использовать метод RenderAction, поскольку каждый виджет имел бы выделенный контроллер, отвечающий за получение различных данных и отображение выделенного представления (в отличие от наличия только одного контроллера и уникальной модели представления для передачи на RenderPartial помощник для рендеринга просмотров).

Из проведенных мною тестов была форма, указывающая на метод действия Create в контроллере, например:

 <% using (Html.BeginForm("Create", "Message", FormMethod.Post, 
     new { id = "messageCreateForm" })) {%>

и вызов его с помощью

 <% Html.RenderPartial("MessageForm",new MessageDTO()); %>

отобразит правильно:

<form id="messageCreateForm" method="post" action="/Message/Create">

, но с тем же эквивалентом, что и RenderAction (поэтому использование метода действия MessageForm на контроллере для визуализации представления) не будет корректно отображаться так:

 <% Html.RenderAction<MessageController>(m => m.MessageForm()); %>

будет отображаться в:

<form id="messageCreateForm" method="post" action="">

Обратите внимание, что действие пустое.

Это правильный способ использовать помощник RenderAction и правильно ли его использовать в подобных случаях?

UPDATE: Фактически переименование частичного представления в _MessageForm отображает форму правильно.

Ответы [ 2 ]

79 голосов
/ 06 октября 2009

Очень старый, но он попал в мой список оставшихся без ответа вопросов:)

Существует большая разница между RenderAction и RenderPartial. RenderPartial будет отображать View на том же контроллере (или совместно используемом), в то время как RenderAction фактически выполнит полный цикл MVC, то есть: он создаст экземпляр контроллера (любой контроллер Вы упоминаете, не только текущий), он выполнит действие, а затем вернет и отобразит результат.

RenderPartial больше похож на inclusion, он даже будет использовать ту же модель, если вы не укажете другую.

RenderAction гораздо сложнее (и могут быть нежелательные побочные эффекты, поэтому они не делали эту функцию доступной с версии 1 - изначально она была доступна в качестве экспериментальной функции).

Так что в вашем случае, если у вас есть виджеты, можно использовать оба. Это зависит от сложности виджета. Если у вас есть тот, который должен получать данные из БД, делать что-то сложное и т. Д. ... тогда вам, вероятно, следует использовать RenderAction.

У меня есть контроллер новостей, отвечающий за объекты новостей. Я создал действие «Блок», которое будет отображать блок с последними новостями для размещения на домашней странице. На мой взгляд, это идеальный пример для RenderAction.

1 голос
/ 26 октября 2012

Работа с MVC требует большого внимания, чтобы не выстрелить себе в ногу. Я имею в виду эффективность продуктов MVC. В сложных проектах я бы предпочел использовать RenderPartial, а не RenderAction. Я использую RenderPartial, в котором я использую запрос jQuery.ajax (с Html.Action). Это определенно работает более эффективно, чем RenderAction. Таким образом, вы можете поместить ваши представления в кеш, а затем вызвать jQuery.ajax. Попробуйте сами. Айенде объясняет это ясно в Спящих Носорогах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...