【问题标题】:Routes not found or constructed incorrectly未找到或构建不正确的路线
【发布时间】:2010-11-15 11:38:10
【问题描述】:

以下是我在 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()
  )
);

如果我在视图中这样做

<%: Html.ActionLink("sl", "feedback-sl")%> | <%: Html.ActionLink("en", "feedback-en")%>

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

如果我在视图中这样做

<%: 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"

我的两个问题:

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

【问题讨论】:

  • 能否分享一下NamedTypedRouteMultiLingualMvcRouteHandler的实现?其中一个可能有问题。

标签: asp.net-mvc model-view-controller asp.net-mvc-2 localization routing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 2016-04-04
    • 1970-01-01
    • 2018-05-29
    • 2021-07-25
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多