【问题标题】:Is it possible to use one layout page for every view, including area views?是否可以为每个视图(包括区域视图)使用一个布局页面?
【发布时间】:2012-04-24 03:27:15
【问题描述】:

我在~/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”。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    要使用区域,请打开 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()链接不同区域,只需要指定正确的路由名称即可。

    【讨论】:

    • 链接到非区域怎么样?就我而言,我在一个区域试图链接到不在一个区域的控制器。另外,我已经在全局调用了 RegisterAllAreas()。
    • @Html.ActionLink("Blog", "Index", "Blog", new { area = "" }, null) ActionLink 方法使用 CURRENT 路由数据来构建链接.
    猜你喜欢
    • 2016-12-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2011-10-26
    相关资源
    最近更新 更多