65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET MVC 4 - Razor 中的布局和区域

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (17投票s)

2014年2月4日

CPOL

5分钟阅读

viewsIcon

270746

downloadIcon

5125

布局用于 Web 应用程序所有页面的统一外观和感觉。

引言

假设您正在开发一个 ASP.NET Web 应用程序,并且希望在 Web 应用程序的所有页面中保持一致的外观和感觉。这时您有两个选择,第一个是在每个页面上设计页眉、正文和页脚部分。在这种方法中,您需要在每个页面上编写更多代码,因此 ASP.NET 2.0 引入了“母版页”,当使用 .aspx 页面或模板时,母版页可以帮助实现这一点。这是您的第二个选择。Razor 也支持这个概念,并提供了一个名为“布局”的功能,允许您定义一个通用的站点模板,然后在 Web 应用程序的所有视图/页面中继承其外观和感觉。

创建 MVC 应用程序

我将使用 Visual Studio 2012 创建一个 MVC 应用程序。所以,让我们一步一步地看看如何创建 MVC 应用程序。

步骤 1:转到“文件”->“新建”->“项目...”。

步骤 2:从列表中选择“ASP.NET MVC 4 Web Application”,然后将应用程序命名为“LayoutMvcApplication”,并在位置输入框中设置您想要创建应用程序的路径。

步骤 3:现在从下拉列表中选择“Empty”项目模板,并将“Razor”选为视图引擎。

为应用程序创建布局

布局用于为 Web 应用程序的所有页面提供一致的外观和感觉,因此我们为 Web 应用程序创建布局。让我们看看具体步骤。

步骤 1:在 Web 应用程序的根目录下创建一个“Content”文件夹。

步骤 2:在 Content 文件夹下创建一个样式表“Site.css”。该 CSS 文件包含一致的 Web 应用程序页面设计所需的所有 CSS 类。

步骤 3:在“View”文件夹下创建一个“Shared”文件夹。

步骤 4:在“Shared”文件夹下创建一个“_Layout.cshtml”文件。“_Layout.cshtml”文件代表应用程序中每个页面的布局。在解决方案资源管理器中右键单击 Shared 文件夹,然后转到“添加”项并单击“视图”。

Create a layout for application

图 1.1 为应用程序创建布局

现在视图已创建。在“_Layout.cshtml”文件中编写以下代码。

        <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title - Code Express</title>
    <link href="~/favicon.ico" 
    rel="shortcut icon" type="image/x-icon" />
    <link rel="stylesheet" 
    href="@Url.Content("~/Content/Site.css")" />
</head>
<body>
    <header>
            <div class="content-wrapper">
                <div class="float-left">
                    <p class="site-title">
                        @Html.ActionLink("Code Express", 
                        "Index", "Home")
                    </p>
                </div>
                <div class="float-right">
                <nav>
                        <ul id="menu">
                            <li>@Html.ActionLink("Home", 
                            "Index", "Home")</li>
                            <li>@Html.ActionLink("About", 
                            "About", "Home")</li> 
                        </ul>
                    </nav>
                </div>
            </div>
        </header>
    <div id="body">
        @RenderSection("featured", required: false)
        <section class="content-wrapper main-content clear-fix">
                @RenderBody()
            </section>
    </div>
    <footer>
            <div class="content-wrapper">
                <div class="float-left">
                    <p>© @DateTime.Now.Year – Code Express</p>
                </div>
            </div>
        </footer>
</body>
</html> 

在此布局中,我们使用了一个 HTML 助手方法和其他一些系统定义的​​方法,所以我们逐一查看这些方法。

_ViewStart 文件

Views 文件夹中的“_ViewStart”文件包含以下内容

 @{
    Layout = "~/Views/Shared/_Layout.cshtml";
} 

在 MVC 应用程序中创建控制器

您需要创建一个控制器,其中包含一个操作方法以在用户界面上呈现视图。我将创建一个 HomeController 控制器,其中包含两个操作方法:一个名为 Index,另一个名为 About。这两个操作方法在请求类型为 GET 时执行,并在浏览器上呈现视图。因此,请使用以下步骤

步骤 1:在解决方案资源管理器中右键单击 Controllers 文件夹,然后转到“添加”并单击“Controller”。

步骤 2:将 Controller 名称输入字段命名为 HomeController,并从 Template 下拉列表中选择“Empty MVC controller”。然后,单击“Add”。

现在您需要在“HomeController.cs”文件中编写以下代码

using System.Web.Mvc;
namespace LayoutMvcApplication.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        } 

        public ActionResult Index()
        {
            return View();
        }
    }
} 

在 MVC 应用程序中创建视图

您需要创建两个视图(IndexAbout),它们通过“_ViewStart”视图继承“_Layout”视图,因此您需要使用以下步骤。

步骤 1:在“HomeController.cs”文件中的 Index() 操作方法上右键单击,然后单击“Add View”。

步骤 2:保持“Add New”屏幕不变,然后单击“Add”。

现在您应该在 Web 应用程序的 index 视图中编写以下代码

 @{
    ViewBag.Title = "Index";
} 

@section featured
{
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h1>@ViewBag.Title.</h1>
            </hgroup>
            <p>
               It is featured section. That is named section in 
               Layout template that defined by RenderSection
            </p>
        </div>
    </section>   
}
<p> It is body of Index view that renders in BodyRender.</p> 

您可以对 About 视图遵循相同的步骤进行创建。

Implement layout on view

图 1.2 在视图中实现布局

您可以为 About 视图获得相同的设计。您可以从附件中下载源代码。

© . All rights reserved.