Из того, что я понял, существует большая разница между Html.RenderPartial
, включенным в выпуск ASP.NET MVC, и HTML.RenderAction
в Microsoft.Web.Mvc.ViewExtensions
, включенном в MVC Futures.RenderAction RenderPartial
В моем приложении у меня есть много страниц, составленных из многих «виджетов» (вроде), каждый из которых имеет свою специфическую функцию.
Мне представляется разумнее использовать метод RenderAction
, так как каждый виджет будет иметь выделенный контроллер, ответственный за получение разных данных и предоставление выделенного представления (в отличие от того, что только один контроллер и уникальная модель представления пройдут до RenderPartial
помощник для визуализации представлений).
Из тестов я сделал, имеющий форму, которая указывает на Создать действие метода в контроллере, как:
<% using (Html.BeginForm("Create", "Message", FormMethod.Post,
new { id = "messageCreateForm" })) {%>
и называя его
<% Html.RenderPartial("MessageForm",new MessageDTO()); %>
будет оказывать correcly: с
<form id="messageCreateForm" method="post" action="/Message/Create">
, но с таким же эквивалентом с RenderAction
(поэтому с использованием MessageForm
метод действия на контроллере, чтобы сделать вид) не будет оказывать correcly так:
<% Html.RenderAction<MessageController>(m => m.MessageForm()); %>
будет оказывать в:
<form id="messageCreateForm" method="post" action="">
Обратите внимание, что действие пуст.
Правильно ли это использовать помощник RenderAction
, и правильно ли использовать его в таких случаях?
ОБНОВЛЕНИЕ: Фактически переименование частичного вида на _MessageForm делает форму корректно.
Я создал статью на эту тему http://prideparrot.com/blog/archive/2012/10/renderpartial_vs__renderaction. Помогите кому-нибудь в этом потоке – VJAI