嘿所有,全新的asp.net mvc和我正在创建一个虚假的社交网站(用于学习目的),通过建立股票mvc模板...我添加了一些观点,等等都很好。但是,现在我添加了一个名为“Blog”的mvc区域,并将链接添加到主菜单。现在,如果我点击任何菜单项,事情就会按预期工作 - 但是当我点击“博客”菜单项时,视图等会显示博客页面但是其他视图的菜单链接会显示/ Blog /现在的URL!?不知道我做错了什么......这是我的菜单代码:
<div id="menucontainer">
<ul id="menu">
@* @Html.ActionLink() Params = String Name, String Controller Name,
string Method (actionLink) Name *@
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Mail", "Index", "Mail")</li>
<li>@Html.ActionLink("Search", "Index", "Search")</li>
<li>@Html.ActionLink("Dating", "Index", "Dating")</li>
<li>@Html.ActionLink("Groups", "Index", "Groups")</li>
<li>@Html.ActionLink("Forums", "Index", "Board")</li>
<li>@Html.ActionLink("Blog", "Index", "Blog")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
</ul>
</div>
答案 0 :(得分:3)
如果Blog位于与其他区域不同的区域,则MVC希望该区域的链接位于同一区域内,因此它会将区域附加到您的URL。如果它们位于不同的区域中,则需要使用“区域”路径值调用ActionLink。例如,如果“约会”位于“社交”区域,您可以使用:
@Html.ActionLink("Dating", "Index", new { controller = "Dating", area = "Social" } );
以下是What’s New in ASP.NET MVC 2的相关讨论:
“区域”现在是一个保留的路线值
现在路线值中的字符串“area” 在ASP.NET MVC中有特殊意义 和“控制器”一样的方式 “行动”做。一个含义是 如果HTML助手提供了一个 包含的路由值字典 “区域”,帮助者将不再 在查询字符串中附加“area”。
如果您使用的是区域功能, 确保不要使用{area}作为其中一部分 您的路线网址。
答案 1 :(得分:1)
它从当前上下文中获取未定义的值。例如,@Html.ActionLink("Test", "Test")
将创建相对于控制器的链接。因此,例如,如果您将在Foo
控制器上呈现它,它将呈现元素<a href="/Foo/Test">Test</a>
。区域也是如此 - 如果您想要跨区域的静态链接,则必须定义它应该引导您的区域。示例:@Html.ActionLink("Test", "Test", "Foo", new { @area = string.Empty }, null)
将始终链接到没有区域的控制器Foo
操作Test
。