WebMatrix - 剃刀的一致外观和伴随

大多数Web开发框架提供了协助在跨页面创建一致的外观和感受的功能,或者为管理可重复使用的部分内容(例如页眉和页脚)进行规定。网页框架也不例外。本文介绍了其剃刀视图引擎提供的核心功能,用于处理模板包装布局和常见内容块。

我要加强我在我以前的WebMatrix文章中开始的Web应用程序: WebMatrix. - 第一个应用程序。目前,该网站只是一个页面,但它会成长,所以现在是开始考虑建立页面设计和内容的结构的时间。在ASP.NET Web Forms和MVC中,Master页面是管理的机制。网页介绍布局页面,从一些开源MVC View引擎借用提供的借款,如优惠,这样的NVelocity和Spark。所以我们将为上一篇文章中的现有网站添加一个,可以 下载了这里.

下载文件夹后,解压缩该站点并将其保存在方便,打开WebMatrix并使用该站点从文件夹选项导航到已保存的文件夹并打开网站。

确保选择“文件”菜单项,右键单击左窗格中的“书籍”图标,然后选择“新建文件夹”选项。将文件夹命名为“共享”。现在,右键单击共享文件夹,然后选择新文件,或在顶部文件菜单中单击“新建”,然后选择“文件”。选择添加CSHTML文件的选项,并调用它_layout.cshtml。使用下划线前缀文件的名称可确保如果它被浏览到,IIS将不会提供请求。将引用从Default.cshtml复制到very.chtml到头部标记中的相应位置。现在切换回Default.cshtml并删除以下代码:

以及底部的闭合体和HTML标签。 default.cshtml需要与布局页面关联。这通过将突出显示的代码添加到页面顶部来实现:

@{
    Layout = "/Shared/_layout.cshtml";
}

此刻,如果启动default.cshtml,您将收到错误,因为它没有提供内容。首先,修改default.cshtml中的代码块以inlcude第二行:

@{
    Layout = "/Shared/_layout.cshtml";
    Page.Title = "My Book Site";
}

然后修改layout.cshtml看起来如下:

<!DOCTYPE html>
<html>
    <head>
        <title>@页 .Title</title>
        <link href="@Href("/Styles/StyleSheet.css")" rel="stylesheet" type="text/css" />
    </head>
    <body> 
        @RenderBody()

    </body>
</html>

是用于变量的容器,可在内容块或页面(默认为...现已成为)和布局页面之间共享。它能够具有应用于它的动态属性,使得任意值可以变为强烈类型的特性 目的。打电话给 渲染体() “布局”页面中的方法指定内容页面的主体应出现在布局页面中的位置。它是传统主页上的ContentPlaceHolder控件等同于默认值.CSHTML以与ASP.NET内容控件相同的方式。现在启动页面时,除了现在在浏览器标题栏中具有标题,否则您将不会注意到很大差异。

一个标题,methinks的时间。这将被视为部分内容。这 renderpage() 方法是将传递作为参数传递的文件名,并在布局页面中呈现。将新的CSHTML文件添加到共享文件夹,并调用它_header.cshtml。然后删除所有默认标记并用以下替换它:

<div>
    <h1>@PAGE.HEADER.</h1>
</div>    

现在转回_layout.cshtml,修改它,添加到renderPage()的调用:

<!DOCTYPE html>
<html>
    <head>
        <title>@页 .Title</title>
        <link href="@Href("/Styles/StyleSheet.css")" rel="stylesheet" type="text/css" />
    </head>
    <body> 
        @RenderPage("/Shared/_header.cshtml")
    
        @渲染体()

    </body>
</html>

最后,需要由内容页面(default.chtml)提供给_header.cshtml文件的值 PAGE.HEADER. 因此,将突出显示的行添加到default.cshtml:

@{
    Page.Header = "View Books";
    Layout = "/Shared/_layout.cshtml";
    Page.Title = "My Book Site";
}

现在,当您启动Default.cshtml时,您可以看到已应用布局页面,反过来拾取标题页面,PageTata字典可以为标题控件的H1标签提供文本:

伟大的!但有一个小问题。最终,这个网站将增长,并获得越来越多的内容页面。目前,我们在每个单独的内容页面中定义了站点的布局的源文件,这是令人厌倦的和容易出错的。我们真正需要的是一个设置这个值的地方,网页提供的形式 _PageStart. 页面。这些文件包含为特定文件夹中的所有页面运行的代码。由于我们希望root文件夹中的所有页面共享相同的布局页面,因此我们将向root添加一个名为_pagestart.cshtml的根目录,并删除所有内容。然后我们需要用这个替换它:

@{
    Layout = "/Shared/_layout.cshtml";
}

最后,我们需要删除default.cshtml中的布局页面声明。当页面运行时,仍然应用布局页面,并且对于添加到站点的根文件夹中的任何其他内容页面。如果在创建的新文件夹中添加了其他内容页面,则每个文件夹都需要自己的_pageStart.cshtml文件,以便如果需要,它可以定位其布局页面。

管理部分内容的另一种方法是使用 rendersection() 方法。这通过在内容页面本身的指定部分,并在布局页面中使用方法调用来解决它们以呈现它们。例如,我们可以在default.cshtml中指定页脚部分:

@section footer{
    <div id="footer">&copy @DateTime.Now.Year All rights reserved</div>
}

然后在布局页面中,我们使用rendersection()方法调用:

<!DOCTYPE html>
<html>
    <head>
        <title>@页 .Title</title>
        <link href="@Href("/Styles/StyleSheet.css")" rel="stylesheet" type="text/css" />
    </head>
    <body> 
        @RenderPage("/Shared/_header.cshtml")
    
        @渲染体()
        
        @RenderSection("footer")
        
    </body>
</html>

请注意,您只需通过内容页面中声明的部分的名称传递。但是,有时您可能只希望此部分出现在某些内容页面上,但所有页面都将使用相同的布局文件。您可以通过制作该部分轻松管理 可选的 通过将第二个参数传递给呼叫:

<!DOCTYPE html>
<html>
    <head>
        <title>@页 .Title</title>
        <link href="@Href("/Styles/StyleSheet.css")" rel="stylesheet" type="text/css" />
    </head>
    <body> 
        @RenderPage("/Shared/_header.cshtml")
    
        @渲染体()
        
        @RenderSection("footer", required: false)
        
    </body>
</html>

实现这一目标的替代方法是使用isceptionDefined()方法:

@if(IsSectionDefined("footer")){
    @RenderSection("footer")
  }

本文查看了许多剃刀视图引擎功能,用于管理内容。我们涵盖了布局页面,以及对渲染体()的调用用于定义页面模板。我们还研究了一些用于管理部分内容 - renderPage()和renderection()的方法。在这个阶段,我没有提供更新的下载。关于此处介绍的概念的伟大事物之一是它们非常简单,您可以将它们应用于上一篇文章的现有下载。