路线未找到或构造不正确

时间:2010-11-15 11:38:10

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

以下是我在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实现可能有问题。我需要这个有命名的路由和键​​入的路由 - 路由可以是管理员和常规路由。我使用此信息根据路由定义动态构建管理菜单。对于管理页面,我有指向资源字符串的名称,然后我在管理页面标题中使用这些名称。这样我就有了可本地化的路由名称。我是不是太复杂了?

1 个答案:

答案 0 :(得分:1)

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

可悲的是,我对第二个问题没有答案。