2010-02-16 4 views
8

Este código está dentro de la página maestra:Conjunto área por defecto - Evitar `, nueva {area = ""}` en cada enlace en el sitio

<li><a href="<%=Url.Action("Action", "Controller") %>">Main site link</a></li> 
<li><a href="<%=Url.Action("AreaAction", "AreaController", new {area = "Area"}) %>">Area link</a></li> 

Todos los enlaces funciona bien hasta que yo Iré al Enlace de área. Cuando voy allí, todas las rutas del área principal no funcionan.

Para fijar que puedo usar esto:

<li><a href="<%=Url.Action("Action", "Controller", new {area = ""}) %>">Main site link</a></li> 

Mi pregunta es, ¿hay alguna manera de evitar , new {area = ""}en cada eslabón de la al sitio principal?

Es muy molesto tener esto en cada enlace en el sitio.

Respuesta

10

Las acciones de la URL son relativas a la ubicación del enlace. Entonces, new {area = ""} no le dice a la llamada de Url.Action que no hay un área, le está diciendo que use el área de raíz . Si omite new {area = ""} desde la llamada Url.Action intentará crear una url para la acción especificada dentro del controlador especificado dentro del área actual (el "Área" está en su caso).

Por lo tanto, es inevitable si desea vincular desde una subárea al área raíz.

3

Todavía no conozco nada a su alrededor si está utilizando los métodos MVC estándar (que no sean anularlos para llamar a su propia versión), pero si usa el ActionLink<TController> u otros métodos genéricos provistos en MvcFutures Lib entonces puedes.

Los métodos de MvcFutures llaman ExpressionHelper.GetRouteValuesFromExpression(), que busca un ActionLinkAreaAttribute en el controlador para determinar el área. Así se puede decorar sus controladores en su "zona" principal de la siguiente manera:

[ActionLinkArea("")] 
[HandleError] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

Los enlaces de acción se deben generar correctamente utilizando la sintaxis estándar:

<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %> 
Cuestiones relacionadas