asp.net-mvc t4mvc

asp.net mvc - T4MVC @ Url.Action(MVC.Controller.Action()) representa "? Área=" Parámetro en QueryString



asp.net-mvc (2)

Algo extraño está ocurriendo aquí, y me pregunto si hay algún tipo de error MVC en la raíz. Incluso sin utilizar T4MVC, esto sucede si escribe:

@Html.ActionLink("Welcome", "Index", "Home", new { Area = "" }, null)

En una vista regular, esto no genera el falso? Área =, mientras que en una llamada Html.Action sí lo hace. Necesito preguntarle a alguien en el equipo.

Por ahora, puede solucionar eliminando esta línea (alrededor de la línea 310) en t4mvc.tt:

<# if (MvcVersion >= 2) { #>result.RouteValueDictionary.Add("Area", area ?? "");<# } #>

Estoy renderizando un menú desde una acción parcial directamente al diseño, usando:

@Html.Action(MVC.Menu.Index())

Esta acción, determina qué menú parcial se va a representar. Por ejemplo, un menú público parcial. Dentro de estos parciales, también estoy usando T4MVC para representar los enlaces:

<ul id="navHolder"> <li class="level1"> <ul class="mainMenu"> <li><b>@Html.ActionLink("Welcome", MVC.Home.Index())</b> ...

Por alguna razón, las URL representadas por T4MVC incluyen "? Area =" al final:

<ul id="navHolder"> <li class="level1"> <ul class="mainMenu"> <li><b><a href="/home/index?Area=">Welcome</a></b> ...

NO tengo áreas en mi proyecto y he cambiado la configuración "IncludeAreasToken" a falso. Curiosamente, esto solo sucede si renderizo el parcial usando "@ Html.Action"; si lo coloco como "@ Html.Partial", el parámetro no se procesa y el enlace es limpio y correcto. (Sin embargo, no quiero mostrarlo como parcial, así que no ofrezca eso como una sugerencia).

¿Alguien por ahí se topa con esto antes?


Resuelvo este problema de una manera muy sencilla, simplemente agregando a todas las rutas que no están en una ruta de área vacía como esta:

routes.MapRoute( "Default", "{controller}/{action}/{i​d}", new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional });