【问题标题】:Issue with action link and areas in asp mvc projectasp mvc项目中的操作链接和区域问题
【发布时间】:2012-03-03 07:32:30
【问题描述】:

我有一个区域Area1 和控制器Home,它是Index 方法。
我还使用控制器Home 创建了另一个区域Area2,它是Index 方法。
Area1 中,我有应该在Area2 中打开Index 页面的操作链接。

@Html.ActionLink("Link to another area index", "Index", "Home", new { area = "Area2" }, null)

但是当我点击这个链接时,它首先转到Area1/Home/Index
为什么会这样。一定要这样还是可以直接去Area2/Home/Index
这让我有问题,因为在 Area1/Home/Index 中我需要一些参数,当这种情况发生时,这个 valuer 是 null 或错误的,这让我有问题。我必须做错事。 更新 区域1路由

public override void RegisterArea(AreaRegistrationContext context)
        {
            context.Routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

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

            context.MapRoute(
                "Area1_default",
                "Area1/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

区域 2 路由:

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

【问题讨论】:

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


    【解决方案1】:

    试试:

    Html.ActionLink("Link to another area index", "Index", "Home", new { Area = "Area2" }, new{});
    

    【讨论】:

    • 还是先去Area1/Home/Index :(
    • 嗯,这很奇怪,我发现更多链接说的几乎相同:f15ijp.com/2011/04/30/… 和这里stackoverflow.com/questions/2036305/…。如果您的区域设置正确并且没有配置特殊路由,我不知道为什么它不起作用。您确实尝试过用大写字母 A 拼写的单词 Area 是吗?
    • 是的,我尝试过“A”。我已经更新了有关路由的问题,因为可能路由给我带来了麻烦。
    • 当我创建项目时,我从 global.asax 中删除了所有路由。我现在返回默认路由并且它有效。我不明白为什么会这样... routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { area = "Area1", controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 );
    • 至少您的操作链接可以正常工作,现在可以专注于路由。路由会变得非常混乱。请记住,始终尝试自上而下匹配路线。因此,首先添加的路由配置将首先尝试匹配的第一个。如果 MVC 找到匹配项,它将不会继续搜索并返回该路由配置。添加路线时,请始终将它们添加到最重要的匹配拳头和最不重要的最后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多