如何使用MVC3 Razor布局页面?

时间:2011-05-16 13:46:01

标签: asp.net-mvc asp.net-mvc-3 layout razor

我一直在阅读有关布局,剖面,视图和局部视图的内容,但我真的不知道如何处理这样的布局:

enter image description here

  • 顶栏:就像酒吧那样 Facebook排在首位。我会包含 验证信息和 一般选项和菜单。

  • 导航栏:将包含 关于你在哪里的信息,以及 你去哪里也是一个“搜索” 框。

  • 正文:实际需要的信息。

  • 边栏:将包含相关内容 有关内容的信息 体。

  • 页脚:版权,许可和事物 那样的。

正文将是“视图”,补充工具栏将是“部分”,页脚将是“布局”中的静态HTML ,但是......什么是顶部栏和导航

顶栏与任何内容无关,所以我会把它作为“局部视图”放在“布局”中,但我不能这样做因为它必须在{{1无论如何,所以当我调用<body>时,它应该被渲染。与 Navigation 相同,它与身体有某种关系,但我想把它分开作为一个独立运行的外部控件,并根据URL中的信息显示信息。

我该如何处理?

更新,请阅读:关于CSS和HTML的问题不是,这不是关于如何布局,而是如何使用Razor工具来做到这一点,这是关于Razor @RenderBody()RenderBody

当我从控制器返回结果时,我想将图片中标记为“body”的内容和“side bar”作为一个部分返回,我想避免重复顶部条形码。有没有办法创建一个“ChildView”,它继承自“ParentView”,这来自“Layout”,当我返回“View(”ChildView“)时,屏幕是自动构建的?

2 个答案:

答案 0 :(得分:10)

查看MVC3 Music Store Tutorial

该教程的最后一部分描述了如何使用Html.RenderAction()方法设计布局以包含部分视图。另请参阅Html.RenderSection()方法。

答案 1 :(得分:10)

关于使用Razor进行布局的帖子非常棒:ASP.NET MVC 3: Layouts with Razor

基本上你的结构将是:
  1)_ViewStart.cshtml(这将指向一个布局和你所有人的观点将分享的其他东西);
  2)一个.cshtml,它将是你的布局,即:_Layout.cshtml(类似于Site.Master网页)。

在_Layout.cshtml内部,您将放置HTML布局,例如:

<body>
    <div id="maincontainer">
        <div id="topsection">
            <div class="topbar">
                <h1>Header</h1>
                <div id="logindisplay">
                    @Html.Partial("_LogOnPartial")
                </div>                
            </div>            
            <div class="nav">
                <ul><li>Home</li></ul>
            </div>            
        </div>

        <div id="contentwrapper">
            <div id="contentcolumn">
                <div class="body">                    
                    @RenderBody()
                </div>
            </div>
        </div>

        <div id="sidebar">
            <b>Side bar</b>
        </div>

        <div id="footer">Footer</div>

    </div>
</body>

看到我把@RenderBody()放在div“#body”中,所以当我的控制器返回一个ActionResult时,只有这个div会用结果更新。