ASP.NET Web Pages – 页面布局

ASP.NET Web Pages(WebMatrix / Razor 语法)中的页面布局详解

ASP.NET Web Pages 使用 Razor 语法(.cshtml 文件),最常见的布局方式就是 Layout Page(布局页) + _ViewStart.cshtml,类似 ASP.NET MVC 的布局机制,非常简洁高效。

1. 基本结构(推荐方式)

1. 创建共享布局页
通常放在根目录下的 _Layout.cshtml/Shared/_Layout.cshtml

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <title>@Page.Title - 我的网站</title>
    <link href="~/css/site.css" rel="stylesheet" />
    @RenderSection("head", required: false)
</head>
<body>
    <header>
        <h1>欢迎来到我的网站</h1>
        <nav>
            <a href="/">首页</a> | 
            <a href="/About.cshtml">关于</a> | 
            <a href="/Contact.cshtml">联系</a>
        </nav>
    </header>

    <div id="main">
        @RenderBody()   <!-- 这里插入具体页面的内容 -->
    </div>

    <footer>
        <p>&copy; @DateTime.Now.Year - 我的 ASP.NET Web Pages 网站</p>
    </footer>

    @RenderSection("scripts", required: false)
</body>
</html>

2. 创建 _ViewStart.cshtml(自动应用布局)
放在根目录(或想应用布局的文件夹里)

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

有了这个文件,该目录及子目录下的所有 .cshtml 页面都会自动使用指定的布局,无需每次手动写。

3. 普通内容页面示例(如 Index.cshtml)

@{
    Page.Title = "首页";
}

@section head {
    <style>
        h2 { color: #0066cc; }
    </style>
}

<h2>欢迎来到首页!</h2>
<p>当前时间:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")</p>

<div>
    这里是首页的主体内容,会被插入到 @RenderBody() 的位置。
</div>

@section scripts {
    <script>
        alert("首页加载完成!");
    </script>
}

2. 其他常用布局技巧

功能写法说明
可选区域(Section)@RenderSection("xxx", required: false)内容页可选择是否定义该 section
强制区域@RenderSection("xxx", required: true)内容页必须定义,否则报错
判断区域是否存在@if (IsSectionDefined("xxx")) { @RenderSection("xxx") }条件渲染
不使用布局(单页)@{ Layout = null; }当前页面不套用任何布局
动态布局@{ Layout = User.IsInRole("Admin") ? "~/AdminLayout.cshtml" : "~/ _Layout.cshtml"; }根据条件选择不同布局

3. 多层嵌套布局(高级)

可以实现类似 Master Page 的嵌套:

// _AdminLayout.cshtml(继承普通布局)
@{
    Layout = "~/Shared/_Layout.cshtml";  // 先套用主布局
}
<div class="admin-panel">
    @RenderBody()
</div>

@section scripts {
    @RenderSection("adminScripts", required: false)
    <script src="~/js/admin.js"></script>
}

内容页:

@{
    Layout = "~/Shared/_AdminLayout.cshtml";
    Page.Title = "管理后台";
}
<h3>后台管理页面</h3>
@RenderBody()

4. 旧版方式(不推荐,但仍可使用)

在没有 _ViewStart.cshtml 的早期项目中,每个页面手动指定布局:

@{
    Layout = "~/Shared/_Layout.cshtml";
    Page.Title = "产品列表";
}

5. 常见目录结构示例

/
├── _ViewStart.cshtml
├── Index.cshtml
├── About.cshtml
├── Contact.cshtml
├── Shared/
│   └── _Layout.cshtml
├── Admin/
│   ├── _ViewStart.cshtml      (可单独指定不同布局)
│   └── Dashboard.cshtml
└── css/
    └── site.css

总结一句话:

最简洁高效的做法就是:创建一个 _Layout.cshtml 作为母版页,在根目录放一个 _ViewStart.cshtml 指定 Layout,以后所有页面自动套用布局,只需要写内容和 @section 即可。

这样就能实现和 ASP.NET MVC 几乎一样的优雅页面布局了。需要我提供一个完整可运行的示例项目结构吗?

文章已创建 2863

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部