Подтвердить что ты не робот

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
4b9b3361

Ответ 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. Кредит за этот ответ действительно идет к Джеймсу Найлу, который опубликовал его в качестве комментария в ответе Натана, но я счел его настолько легким и ценным, что я думал, что это должен быть индивидуальный ответ.