如何将特定区域的视图配置为MVC 4应用程序的主条目?

时间:2013-04-02 16:57:21

标签: asp.net-mvc razor asp.net-mvc-4 routes

请在这种情况下需要帮助:

我有一个区域“\ UI”,其中一个Controller“ActionController”和他的View“Login.cshtml”也在他的UIAreaRegistration类中:

public class UIAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get { return "UI"; }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "UI_default",
            "UI/{controller}/{action}/{id}",
            new { controller = "Account", action = "Login", id = UrlParameter.Optional }
        );
    }
}

现在我希望Login.cshtml成为该应用的第一个视图。 然后在global.asax.cs的'RegisterRoutes'中我有:

AreaRegistration.RegisterAllAreas();

//Default    
//routes.MapRoute(
//    name: "Default",
//    url: "{controller}/{action}/{id}",
//    namespaces: new[] { "", "" },
//    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
//);

routes.MapRoute(
    name: "Default",
    url: "{area}/{controller}/{action}/{id}",
    defaults: new { area = "UI", controller = "Account", action = "Login", id = UrlParameter.Optional }
);

但是没有用,请问我该怎么办?

提前致谢

1 个答案:

答案 0 :(得分:0)

您要做的是将UI区域设置为默认区域,因此UI中的任何控制器都可以在URL中无UI前缀的情况下访问。 问题是根文件夹中的控制器将不再可访问。如果它是您想要的,您可以通过以下方式更改区域路线注册:

 public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "UI_default",
            "UI/{controller}/{action}/{id}",
            new { controller = "Account", action = "Login", id = UrlParameter.Optional }
        );
    }

为:

 public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "UI_default",
            "{controller}/{action}/{id}",
            new { controller = "Account", action = "Login", id = UrlParameter.Optional }
        );
    }

更简单的解决方案是在默认控制器上创建一个操作,将用户重定向到您的区域