是否可以为每个视图使用一个布局页面,包括区域视图?

时间:2012-04-11 19:19:18

标签: c# asp.net-mvc asp.net-mvc-3 razor html-helper

我在~/Views/Shared/_Layout.cshtml中有一个布局页面,它适用于所有渲染的普通视图。但是,我创建了一个名为“Demos”的区域,并在~/Areas/Demos/Views/_ViewStart.cshtml文件中将其指向我的原始布局页面。

除了对@Html.ActionLink()的一些调用现在以区域名称作为前缀之外,这个工作正常。因此,@Html.ActionLink("Blog", "Index", "Blog")通常会在区域视图中生成类似“website.com/Blog/Index”的链接,因此会生成“website.com/Demos/Blog/Index”。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要使用区域,请打开Global.asax文件,并将以下代码插入Application_Start方法

AreaRegistration.RegisterAllAreas();

您可以像在任何MVC应用程序中一样在区域内链接,但要生成指向其他区域的链接,您必须在routeValues参数中为这些方法显式传递目标区域名称。

@Html.ActionLink("Blog", "Index", "Blog", new { area = "blog" }, null)
仅需要

null参数,因为具有routeValues参数的ActionLink方法重载也具有htmlAttributes参数,但为了能够在区域之间进行链接,不需要它。

<强>更新

您可以使用RouteLink()代替ActionLink()来绕过区域注册。

@Html.RouteLink("Blog", "MyRoute", new { action = "Index", controller = "Blog" })

第二个参数(“MyRoute”)是在Global.asax中注册的路线名称,因此要使用RouteLink()在不同区域之间进行链接,您只需要指定正确的路线名称。