【发布时间】: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"
我的两个问题:
- 为什么会有两个非常相似的助手,RouteLink 和 ActionLink?它们之间有什么区别?
- 我猜我的 NamedTypedRoute 实现可能有问题。我需要它来命名路由和键入路由 - 路由可以是管理员和常规的。我使用此信息根据路由定义动态构建管理菜单。对于管理页面,我有指向资源字符串的名称,然后我在管理页面标题中使用这些名称。这样我就有了可本地化的路线名称。我是不是太复杂了??
【问题讨论】:
-
能否分享一下
NamedTypedRoute和MultiLingualMvcRouteHandler的实现?其中一个可能有问题。
标签: asp.net-mvc model-view-controller asp.net-mvc-2 localization routing