Pregunta ASP.Net MVC Cómo pasar parámetros de url usando Html.RenderAction a una ChildAction


Pensé que esto iba a ser sencillo, pero logré manguera de alguna manera. Si quiero pasar parámetros de URL a otra acción, ¿tengo que crear una nueva ruta para eso?

controlador

[ChildActionOnly]
    public ActionResult ContentSection(string sectionAlias, string mvcController, string mvcAction = null)

ver

@Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"})

error

 CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments

26
2018-02-10 23:44


origen


Respuestas:


El problema aquí es que

@Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"})

Es el equivalente a

<%= Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}) %>

En el Webforms ViewEngine (que también es el mismo Response.Write) Ya que RenderAction devoluciones void, no puedes Response.Write eso. Lo que quieres hacer es esto:

@{
     Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"});
 }

los @{ } la sintaxis significa un bloque de código en el motor de vista Razor, que sería equivalente al siguiente, las Webforms ViewEngine:

<% Html.RenderAction("ContentSection", "Portal", new {sectionAlias = "TermsAndConditions", mvcController = "Portal", mvcAction = "ChoosePayment"}); %>

33
2018-02-11 00:31



La respuesta breve sería: use @ Html.Action ().

@Html.Action("ContentSection", "Portal", new {sectionAlias = "Terms", ...})

los respuesta larga ya fue dado por Nathan Anderson.

PD El mérito de esta respuesta realmente se lo debo a James Nail, quien lo publicó como un comentario en la respuesta de Nathan, pero me pareció tan fácil y valioso que pensé que debería ser una respuesta individual.


12
2017-09-02 22:32