以下是我在 global.asax.cs 中的路由定义:

routes.Add(
  new NamedTypedRoute(
    "feedback-en", RouteType.Regular, "{culture}/Feedback",
    new RouteValueDictionary(
      new
      {
        culture = "en",
        controller = "Feedback",
        action = "Index"
      }
    ),
    null,
    new MultiLingualMvcRouteHandler()
  )
);

routes.Add(
  new NamedTypedRoute(
    "feedback-sl", RouteType.Regular, "{culture}/Kontakt",
    new RouteValueDictionary(
      new
      {
        culture = "sl",
        controller = "Feedback",
        action = "Index"
      }
    ),
    null,
    new MultiLingualMvcRouteHandler()
  )
);

如果我在 View 中这样做
<%: Html.ActionLink("sl", "feedback-sl")%> | <%: Html.ActionLink("en", "feedback-en")%>

构造的 URL 指向根站点(构造的链接中不包含 Controller /操作信息)。

如果我在 View 中这样做
<%: Html.RouteLink("sl", "feedback-sl")%> | <%: Html.RouteLink("en", "feedback-en")%>

出现异常:
"A route named 'feedback-sl' could not be found in the route collection.
Parameter name: name"

我的两个问题:
  • 为什么有两个非常相似的帮助器,RouteLink 和 ActionLink?它们之间有什么区别?
  • 我想我的 NamedTypedRoute 实现可能有问题。我需要它来命名路由和键入路由 - 路由可以是管理员和常规路由。我使用此信息根据路由定义动态构建管理菜单。对于管理页面,我有指向资源字符串的名称,然后在管理页面标题中使用这些名称。这样我就有了可本地化的路线名称。我是不是太复杂了??
  • 最佳答案

    Html.ActionLink 扩展呈现链接到 Action 的 anchor 元素。另一方面,Html.RouteLink 扩展呈现一个 anchor 元素,它可以解析为一个 Action 方法、一个文件、一个文件夹或一些其他资源。 RouteLink 并不像 ActionLink 那样真正采用 ActionName 和 ControllerName 字符串。从更多细节看一下参数的参数名称。这里的描述并不是用 MSDN/IntelliSense 写得很好。

    遗憾的是,我对第二个问题没有答案。

    关于asp.net-mvc - 未找到或错误构建的路线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4183950/

    10-09 22:02