ASP.Net MVC Как передать параметры URL с помощью Html.RenderAction для ChildAction
Я думал, что это будет прямо, но мне удалось каким-то образом поднять его. Если я хочу передать параметры URL другому действию, должен ли я создать для него новый маршрут?
контроллер
[ChildActionOnly]
public ActionResult ContentSection(string sectionAlias, string mvcController, string mvcAction = null)
Вид
@Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"})
Ошибка
CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
Ответы
Ответ 1
Проблема здесь в том, что
@Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"})
Является эквивалентом
<%= Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}) %>
В Webforms ViewEngine
(который также является тем же самым Response.Write
). Поскольку RenderAction
возвращает void
, вы не можете Response.Write
его. Что вы хотите сделать, так это:
@{
Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"});
}
Синтаксис @{ }
обозначает блок кода в движке просмотра Razor, который будет эквивалентен следующим Webforms ViewEngine
:
<% Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}); %>
Ответ 2
Короткий ответ: use @Html.Action().
@Html.Action("ContentSection", "Portal", new {sectionAlias = "Terms", ...})
длинный ответ уже был дан Натан Андерсон.
P.S. Кредит за этот ответ действительно идет к Джеймсу Найлу, который опубликовал его в качестве комментария в ответе Натана, но я счел его настолько легким и ценным, что я думал, что это должен быть индивидуальный ответ.