2011-03-09 16 views
36

Hay alguien sabe cómo configurar zonas en ASP.NET MVC3. Leí un artículo sobre Áreas en here. Pero ese artículo no está basado en MVC3. En MVC3 no existe una función llamada en MapRootAreaRouteCollection routes que se encuentra en Global.asaxCómo configurar zonas en ASP.NET MVC3

routes.MapRootArea("{controller}/{action}/{id}", 
       "AreasDemo", 
        new { controller = "Home", action = "Index", id = "" }); 

cuando se crea una nueva área usando MVC3, tengo una clase de esa zona, que heredó de AreaRegistration y se ven como siguiente: (blogs aquí es el nombre del área)

public class BlogsAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Blogs"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Blogs_default", 
      "Blogs/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

qué alguien por favor me ayude ¿Cómo se configura el área de MVC3. Cualquier tipo de enlace sería útil también.

Respuesta

40

Haga clic derecho sobre su proyecto web y seleccione Agregar -> Área ... A continuación, escriba el nombre de la zona y Visual Studio se hará cargo del resto que es para generar todas las clases necesarias. Por ejemplo, el registro de área podría tener este aspecto:

public class AreasDemoAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "AreasDemo"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "AreasDemo_default", 
      "AreasDemo/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

y en Application_Start de su Global.asax todo lo que necesita es:

AreaRegistration.RegisterAllAreas(); 
+0

gracias por la answer.How puedo saber que la zona está registrado correctamente ?. He utilizado este enlace en mi _layout compartida pero no me va a llevar en cualquier lugar @ Html.ActionLink ("Blog", "Acerca de", "Inicio", nueva área de {= "Blog"}) – Imrul

+0

@Imrul, por lo que puedo ver en su código su área se llama 'Blogs', no' Blog', así que intente: '@ Html.ActionLink (" Blog "," Acerca de "," Casa ", nuevo {area =" Blogs "})'. También asegúrese de que haya un 'HomeController' dentro de esta área. –

+0

lo siento, por el error de ortografía. Creo que tengo mi problema, si renderizo esto en mi _layout, no genera un enlace a Área/Controlador/Acción "@ Html.ActionLink (" Blog "," Índice "," BlogHome ", nuevo {area =" Blogs "})". ¿Estoy haciendo algo mal en el asistente de ActionLink? y ahora descubro que el mismo nombre de controlador no puede ser posible en la raíz y el área. Para eso tuve que cambiar el nombre de Home to BlogHome. y FYI Blog es el HTML generado y el uso de http: // localhost: 4135/Blogs/BlogHome/Índice golpea el controlador BlogHome y muestra la página. – Imrul

5

Usted puede tener el mismo nombre del controlador de la raíz y de la zona, solo tiene que definirlo.

En su Global.asax, añadir la última línea de la routes.maproute como se muestra a continuación

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional },// Parameter defaults 
     new[]{"YourNameSpace.Controllers"} 
); 

también, agregue el nombre del controlador en sus ares ????? archivo/AreaRegistration.cs

context.MapRoute(
     "Membership_default", 
     "Membership/{controller}/{action}/{id}", 
     new { controller= "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
1

por favor encuentre abajo la imagen muestra cómo configurar el área en mvc. enter image description here