asp.net – MVC4默认路由指向某个区域

前端之家收集整理的这篇文章主要介绍了asp.net – MVC4默认路由指向某个区域前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的项目中有两个区域:
Areas | Admin
Areas | FrontEnd

我想要的是当我访问该站点时,默认路由应该从FrontEnd区域加载Controllers / Views / Models.为管理员面板设置Url / Admin是正常的,但我宁愿不必强制Url / FrontEnd(或其他一些变体).基本上我不想在根级别使用Controller / Model / View文件夹.

我不知道如何更改代码以允许这个甚至是一个可取的方法.有人可以提供一些指导吗?

是)我有的:

routes.MapRoute(
                "Admin_default","Admin/{controller}/{action}/{id}",new { 
                    area = "Admin",controller = "Home",action = "Index",id = UrlParameter.Optional 
                },namespaces: new[] { "WebsiteEngine.Areas.Admin.Controllers" }
            );

            routes.MapRoute(
                name: "Default",url: "{controller}/{action}/{id}",defaults: new { 
                    area = "FrontEnd",namespaces: new[] { "WebsiteEngine.Areas.FrontEnd.Controllers" }
            );

但是这会产生错误

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Home/Index.aspx
~/Views/Home/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Home/Index.cshtml
~/Views/Home/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml

我确实有区域的视图,这看起来不像它在那里.

解决方法

我相信你可以这样做:
// Areas/Admin/AdminAreaRegistration.cs
public class AdminAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get { return "Admin"; }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            name: "Admin_Default",url: "Admin/{controller}/{action}/{id}",defaults: new 
            {
                area = "Admin",id = UrlParameter.Optional 
            });
    }
}


// Areas/Admin/FrontEndAreaRegistration.cs
public class FrontEndAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get { return "FrontEnd"; }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            name: "FrontEnd_Default",defaults: new 
            {
                area = "FrontEnd",id = UrlParameter.Optional 
           });
    }
}

// Global.asax.cs
protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    ...
}

现在,在RouteConfig类中,您可能已设置了默认路由.请记住,只要在调用RouteConfig.RegisterRoutes之前调用AreaRegistration.RegisterAllAreas,您在区域中设置的路由可能会覆盖您在RouteConfig中设置的路由. (路由按它们在Routes集合中出现的顺序进行评估,而.MapRoute将新路由推送到最后)

猜你在找的asp.Net相关文章