ActionLink в RenderAction
Я использую RenderAction, чтобы включить вывод нескольких "компонентов" в моем представлении. Но каждый раз, когда я использую вызовы RenderAction для ActionLink в рамках вложенного действия, возникают неправильные маршруты. (То же самое для RouteLink.) Если действие вызывается напрямую, создаются правильные маршруты.
Поэтому я несколько раз вызываю действие в действии index моего родительского представления:
<% Html.RenderAction<StateAdminController>(c => c.Index(StateType.Event)); %>
<% Html.RenderAction<StateAdminController>(c => c.Index(StateType.Booking)); %>
<% Html.RenderAction<StateAdminController>(c => c.Index(StateType.Communication)); %>
<% Html.RenderAction<StateAdminController>(c => c.Index(StateType.Payment)); %>
И в Nested Index-View я пытаюсь сделать ActionLink на метод Edit StateAdminController:
<%= Html.ActionLink<StateAdminController>(c => c.Edit(state.Id), "Bearbeiten") %>
Но ActionLink указывает на Index-Action моего родительского представления.
Это известная проблема? Могу ли я сделать что-то не так? Как должны выполняться ActionLinks, когда действие вызывается из RenderAction?
Заранее спасибо.
С уважением.
Иоахим
2 ответа
Я предпочел бы спроектировать мою модель представления, чтобы она содержала свойства для всех вариантов, а затем вызвать RenderPartial()
:
<% Html.RenderPartial("StateAdmin", Model.Event); %>
<% Html.RenderPartial("StateAdmin", Model.Booking); %>
<% Html.RenderPartial("StateAdmin", Model.Communication); %>
<% Html.RenderPartial("StateAdmin", Model.Payment); %>
Или даже фантазии с моим собственным методом расширения, который перебирает коллекцию и вызывает RenderPartial()
для каждого:
<% Html.RenderPartials("StateAdmin", Model.StateTypes); %>
В то время как RenderAction()
делает трюк, вызывая и визуализируя действие из представления, кажется мне немного неправильным. Представление уже является результатом действия.
Вы упомянули маршруты. Стоит отметить, что когда вы используете RenderAction, контроллер вызывается напрямую (т.е. не из URL). Следовательно, он не проходит через вашу таблицу маршрутизации.