ASP.NET MVC:除非指定了某个区域,否则始终自动链接到默认区域

时间:2011-02-01 00:08:38

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

我有一个没有区域的现有应用程序。但是,我添加了一个全新的部分,所以我创建了一个区域。所以我有一个区域和默认区域。

所以,例如:

默认路线= /发票/创建

区域路线= / TAE /港口/创建

这两个链接都有效。但是,当我导航到TAE区域部分时,所有链接都会更改为在该TAE区域内。例如/ TAE /发票/创建

我可以强制他们没有区域向操作链接添加新的{area =“”},但这涉及修改应用程序中的每个链接。

是否可以将没有指定区域的actionlink始终转到默认区域,无论当前页面位于哪个区域?

的global.asax.cs

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

    }

TAEAreaRegistration.cs

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

链接到TAE区域:

<%= Html.ActionLink("Create", "Create", "Port" , new { area = "TAE"}, new {}) %>

正常区域链接:

<%= Html.ActionLink("Create", "Create", "Invoice") %>

1 个答案:

答案 0 :(得分:0)

编辑: 我建议,如果你要在任何地方使用某个区域,你应该把它们全部放在区域内。

否则,你可以使用该签名覆盖扩展名并默认为area =“”然后你永远不需要写它:D This is a link to what you would want to overwrite ;D

额外编辑:只是为了确保你理解我给你的道路。您可以轻松地创建一个新的扩展名,该扩展名将填充参数区域为空白的函数。或者总是只是覆盖lol祝你好运