当我们使用应该放置路由的区域时 - asp mvc

时间:2012-02-10 21:26:33

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

如果我们在一个项目中有更多区域,那么应该在哪里存储路由值。 应该转到Global.asax以及AreaAreaRegistration.cs中的课程内容 我不经常使用asp mvc(它仍然是业余爱好),但路由一直让我遇到问题:( 我必须举一个令我困惑的例子: 我有两个区域并链接在一个区域( CityPage ),它应该在另一个区域打开页面。 所以在global.asax我有:

routes.MapRoute(
                "CityPage_home",
                "{country}/{city}",
                new { controller = "Home", action = "Index", country = UrlParameter.Optional, city = UrlParameter.Optional }
            );

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

这很有效。但是,如果我将“* CityPage_home *”从global.asax移到CityPageAreaRegistration.cs,那么当我点击应在另一个区域打开页面的链接时,我的应用程序会崩溃,因为代码首先在CityPage/Home/Index方法中输入。登记/> 我不明白为什么这个路由在第一种情况下工作而在另一种情况下不工作。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在每个区域内,将为您生成一个文件。例如。

AdminArea将包含名为AdminAreaRegistration的文件 使用这样的方法:

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

我想通过添加默认控制器来修改它。

行动链接

传统上我们使用以下方法创建链接:

@Html.ActionLink("MyLink","Index","Home",)

要创建指向管理区域的链接,我们使用此链接:

@Html.ActionLink("Admin Area","Index", new { area = "Admin", controller = "Home" })

现在,如果您在管理员内部并希望放置指向主页的链接,则需要执行此操作:

@Html.ActionLink("Home","Index", new { area="", controller = "Home })

最后,如果您需要创建自定义路由,可以将区域路由放在每个区域内创建的新文件中,并继续将非区域特定路由放在正常的Global.asax中。

答案 1 :(得分:1)

根据您的描述。我认为您的CityPage区域上的链接与模式area/controller/action不匹配 相反,它匹配controller/action,在您的情况下,country/city

当你的global.ascx中有“CityPage_home”时,它匹配第一条路线,动作等于“home”,动作等于“index”。您网址中的值将分配到countrycity

但如果您将路线“CityPage_home”移至CityPageAreaRegistration.cs,则会选择default路线。因为global.ascx中的路线将首先被查找,在这种情况下,区域为CityPage,因为您将其设置为默认值。

@Nick为您提供了有关区域路由

的详细介绍