.NET Core + Razor-静态文件、布局页

作者:vkvi 来源:ITPOW(原创) 日期:2021-12-24

静态文件

建立静态文件

与 Pages 平级,建一个文件夹,叫 wwwroot,注意,这个名字不能随便改。

再在下面建一 img 文件夹(或其他名称),再在里面放一张图片。

引用静态文件

Index.cshtml 中增加一句:

<img src="~/img/logo.png" alt="itpow" />

支持 ~/ 写法,你不用这个写法也可以。

启用静态文件

在 Program.cs 中增加 app.UseStaticFiles();,此时我们的 Program.cs 变成了:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages(); // 这句是新增的。
var app = builder.Build();

//app.MapGet("/", () => "Hello World!");
app.UseStaticFiles(); // 这句是新增的。
app.MapRazorPages(); // 这句是新增的。

app.Run();

就可以看到图片了。

布局页

建立布局页

可以暂时将“布局页”理解为“母版”。

在 Pages 下,建一个文件夹,叫 Shared注意,这个名字不能随便改。

然后再在下面建一个 _Layout.cshtml,里面的代码如下(注意:没有 @page 标志)。

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <div>头</div>
        @RenderBody()
        <div>尾</div>
    </body>
</html>

注意:

  • 没有 @page 标识。

  • 必有 @RenderBody()。

应用布局页

在 Index.cshtml(称为内容页)中应用该 Layout,代码如下:

@page
@model WebApplication1.Pages.IndexModel
@{
    Layout = "_Layout";
}
<img src="~/img/logo.png" alt="itpow" />

这个 _Layout 也就是前面的文件标识符名称,这是默认的,咱们也可以用我们自己的名字。

说到这里,前面提到好多,都说名称不能随便改,但是不能随便改不代表不能改,比如这里,我就不喜欢把布局文件放 Shared,我就要放其他文件夹,比如:放在 Pages/master/Root.cshtml,也是可以的,只是引用布局页要使用全路径了:

@{
    Layout = "~/Pages/master/Root.cshtml";
}

指定默认布局页

你可能会说,我看别人的代码,也没有每个页面都指定布局页啊。这是怎么做到的?

Pages 下新建一文件:_ViewStart.cshtml注意,这个名字不能随便改。内容如下:

@{
    Layout = "_Layout";
}

“操纵”布局页

布局页如下:

<!DOCTYPE html>
<html>
    <head>
        <title>@ViewData["Title"]</title>
    </head>
    <body>
        <div>头</div>
        @RenderBody()
        <div>尾</div>
    </body>
</html>

页面如下:

@page
@model WebApplication1.Pages.IndexModel
@{
    ViewData["Title"] = "itpow";
}
<img src="~/img/logo.png" alt="itpow" />

Ctrl + F5,可以看到,页面标题变了。顺便说一下,大家应该会发现,ASP.NET Core 运行时,不像 ASP.NET 打开新浏览器窗口,而是自动刷新原浏览器窗口。

至此,我们的项目结构如下:

Razor 项目结构

相关文章