【问题标题】:ASP.NET MVC3 not right index page because of routes由于路由,ASP.NET MVC3 没有正确的索引页面
【发布时间】:2011-12-20 16:41:49
【问题描述】:

我有这些路线:

 routes.MapRoute(
                 "ActionOnly",
                 "{action}",
                 new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                 new { action = "Klub|Historie" });

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

            // Hrac/Jmeno_hrace
            routes.MapRoute(
                 "Hrac",
                 "Hrac/{name}",
                 new { Controller = "Hrac", Action = "Name" }
            );


            // pro aktivaci uzivatele který se registroval, ale jeste nepotvrdil email
            routes.MapRoute(
                "Activate",
                "Account/Activate/{username}/{key}",
                new { controller = "Account", action = "Activate", username = UrlParameter.Optional, key = UrlParameter.Optional }
            );

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

为什么@Html.ActionLink("Domů", "Index", "Home") 创建的是 website.com/Administrace/Home 而不是 website.com/Home/index,我该如何解决?

【问题讨论】:

  • 尝试使用@Html.RouteLink 代替默认路由。

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


【解决方案1】:

您的 Administrace 路由正在吞噬所有控制器。

您应该将其更改为硬编码控制器名称:

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

如果您希望该路由适用于多个控制器,则应将其替换为区域(或仅添加约束)。

【讨论】:

  • 区域看起来不错,但我对 Ninject 没什么问题。它没有为我的路线返回控制器。我应该在 ninject 中更改一些内容吗?
  • 我不知道;在 Google 上搜索 ninject asp.net mvc areas
【解决方案2】:

使用@Html.RouteLink 代替路由名称为default

链接到可能有帮助的内容: What's the difference between RouteLink and ActionLink in ASP.NET MVC?

【讨论】:

  • 感谢 routelink,它工作正常,如果我不使用其他帖子的区域,我会接受你的 :)
猜你喜欢
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2012-04-08
  • 1970-01-01
相关资源
最近更新 更多