我知道之前已经问过这个问题,但我真的很挣扎于MVC中的路由配置概念 - 特别是从URL中删除控制器名称和/或动作名称。
在我的网页上,我有一个名为“Sidebar”的局部视图,它使用自己的控制器(SidebarController)。
在侧边栏的局部视图中,我有以下ActionLink:
@Html.ActionLink("December-2012", "Archive", new { id = "December-2012" })
构建链接时,URL显示为
http://localhost/Sidebar/Archive/December-2012
我的问题是在网址中出现“补充工具栏”部分 - 此控制器在技术上不是使用进行任何导航;它只是用来构建局部视图。相反,我希望URL读取:
http://localhost/Archive/December-2012
我尝试在ActionLink上指定控制器,但这只会导致
http://localhost/Archive/Archive/December-2012
有人可以解释(用简单的术语)我如何配置路由,以便当/ Archive放在URL的末尾时,它知道用(假设)索引(id)动作调用ArchiveController吗? / p>
提前感谢,并且对于提出之前已经涉及过的问题道歉 - 正如我所说的那样,我只是在努力解决路线图的整个概念。
答案 0 :(得分:2)
不完全确定你在这里做错了什么。也许还包括第二个网址的代码。
您可以使用Html.ActionLink方法的this overload:
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
Object routeValues,
Object htmlAttributes
)
您可以这样使用它:
@Html.ActionLink("December-2012(ThisIsLinkText)", "Index", "Archive",
new { id = "December-2012"}, null);
将产生以下网址:
http://localhost/Archive/Index/December-2012
<强>更新强>
根据您的评论,您需要在默认路线上方显示此路线:
routes.MapRoute(
"ArchiveRoute",
"Archive/{id}",
new { controller = "Archive", action = "Index", id = UrlParameter.Optional }
);
相同的操作链接应映射到此网址:
@Html.ActionLink("December-2012(ThisIsLinkText)", "Index", "Archive",
new { id = "December-2012"}, null);
请记住路线必须高于默认路线。
此网址应该有效:
http://localhost/Archive/December-2012
答案 1 :(得分:0)
修改,为索引尝试空白操作:
@Html.ActionLink("December-2012", "", "Archive", new { id = "December-2012" }, null)
有人可以解释(用简单的话说)我如何配置 路由,以便当/ Archive放在URL的末尾时,它知道 用(假设)索引(id)动作调用ArchiveController?
默认路由应该这样做。这是默认路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这里发生的是,当您在http://localhost/
中输入您的网址时,它会运行该路由,并注意到没有指定控制器/操作,因此它将转到默认的“Home”,并运行默认操作是“索引”。
您可以在Archive
中的默认路线上方添加RouteConfig
路线(例如)(如果您使用的是mvc3,则为Global.asax
):
routes.MapRoute(
name: "ArchiveRoute",
url: "archive/{id}",
defaults: new { controller = "Archive", action = "Index", id = UrlParameter.Optional }
);
每次您的网址开始时都会点击http://localhost/archive
希望更清楚。