代码之家  ›  专栏  ›  技术社区  ›  mare

未找到或构造错误的路由

  •  4
  • mare  · 技术社区  · 14 年前

    以下是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 回复  |  直到 14 年前
        1
  •  1
  •   gligoran zz-sergant    14 年前

    html.actionLink扩展呈现链接到操作的锚定元素。另一方面,routelink扩展名呈现一个锚元素,该锚元素可以解析为操作方法、文件、文件夹或其他资源。routelink并不像actionlink那样使用actionname和controllername字符串。从更详细的信息中,可以看到参数的参数名。这里的描述并不是很好地用msdn/intellisense编写的。

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