【问题标题】:No controller specified in route路由中没有指定控制器
【发布时间】:2017-01-23 04:12:48
【问题描述】:

情况:

我有一个 ASP.NET 应用程序,其中有不同的控制器。我在 RouteConfig 中更改了路由到:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    "SpecificRoute", 
    "{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Error", action = "NotFound", id = UrlParameter.Optional }

我的 HomeController 中的所有页面都运行良好。我找到他们的一种方法是使用 ActionLink:

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

这很好用,即使与上下文的其他方式一样:“example”,“Home”。

当我选择另一个控制器时出错了,比如说:

@Html.ActionLink("GoToErrorPage", "NotFound", "Error") // error page

这个链接的结果是它只是连接到主页。它没有进入正确的页面。


我想使用如下 URL 连接到所有页面(也在其他控制器中):

http://localhost:12345/Request

原始 url 的样子(在 RouteConfig 更改之前)

http://localhost:12345/Home/Request


问题:

  1. 我需要如何配置 RouteConfig

  2. 如何设置不需要在 url 中的操作?

  3. 如何正确设置 ActionLink?

【问题讨论】:

  • 您的两条路线是相同的(它们可以接受 2 段)。如果你想要特定的路线,它们需要是可区分的。但是,如果您希望能够省略控制器(或标识控制器的东西),那么您需要为应用程序中的每个方法创建一个路由。
  • @StephenMuecke 如何让它们相互区分?或者我如何为每个页面创建一个特定的路由?
  • 如果你想用../RequestHomeControllerRequest()方法,你需要一个带有url: Request/{id}defaults: new { controller = "Home", action = "Request", id = UrlParameter.Optional }的特定路由(放在默认路由之前)
  • @StephenMuecke 工作!在下面回答这个问题,你就有答案了。

标签: asp.net asp.net-mvc url razor html-helper


【解决方案1】:

您的两条路线实际上是相同的,因为它们都匹配具有 2 个段的任何 url。如果您希望能够在不指定控制器名称的情况下导航到某个方法,那么您将需要为每个方法创建特定的路由。例如,如果你想导航到HomeControllerRequest(int? id) 方法,使用../Request../Request/1 那么你需要

routes.MapRoute(
    "Request", 
    "Request/{id}", 
    new { controller = "Home", action = "Request", id = UrlParameter.Optional }
);

并且该路由必须放在默认路由之前

然后在视图@Html.ActionLink("Request Page", "Request", "Home")会生成一个../Request的url,然后去HomeControllerRequest()方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多