MVC路线古怪

时间:2011-02-19 02:08:35

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas

嘿所有,全新的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>

2 个答案:

答案 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