如何在具有自己的“路由”的特定“区域”中操作代码时,如何保持我的一般“路由”不变?

时间:2013-08-29 22:16:23

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

我正在使用MVC3和C#。

我在一个区域内有一个子应用程序,而主应用程序挂起了项目的根目录 即:

Root
  - Controller
  - Models
  - Views
  - Areas
     - SubApp

SubApp有自己的路由文件,其中包含以下默认路由:

            context.MapRoute(
            "SubApp_default",
            "SubApp/{controller}/{action}/{id}",
            new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
        );

我有一个带URL的通用菜单,应指向根控制器/操作。但是,当我在SubApp中时,这些菜单URL会发生变化,例如:

/SubApp/Home/Index 

应该是:

/Home/Index

我怀疑上面的“SubApp_default”路由导致了这个问题。我希望“Root”网址使用“Root”路由,如果你得到我的漂移,并且只使用区域特定的URL来使用区域路由。

请注意。

非常感谢。

EDIT1:

我正在使用ActionLinks,即:

 @Html.ActionLink("Create Order", "Index", "Order", new { area=""},null) 

将显示为菜单项。在SubApp区域/应用程序中,这将被路由为

 /SubApp/Order/Index 

而不是

/Order/Index. 

我在_layout页面中有这个菜单ActionLink代码。

1 个答案:

答案 0 :(得分:2)

如果您的应用中有区域,则需要具体说明要指向的控制器和操作。

如果您在SubApp区域内,那么您需要创建指向根目录的任何链接都应包含空白区域。

@Url.Action("index", "home", new { area = "" }

使用相同的概念,从根控制器到SubApp区域的任何URL都应该包含链接中的区域:

@Url.Action("index", "home", new { area = "SubApp" }

如果您没有跨越任何边界,则不指定该区域将默认为您所在的区域。