.net5 core Razor项目实战系列之二:生成项目及框架简析
项目创建步骤如下:
第1步:创建新项目->ASP.NET Core Web 应用程序
第2步:配置新项目,项目名称 "AuthManagement"
第3步:创建新的ASP.NET Core Web 应用程序(这里的.net core版本选5.0)。
项目建好后在解决方案管理器中把目录展开是这样的:
和WEB API项目相比,可以看到
(1)多了wwwroot的文件夹(一般用于存放css、js、image等文件)和一些 .cshtml和.cshtml.cs文件。
(2)图中的Pages文件夹就是来存放Razor页面文件的(在访问Razor页面的时候不需要将Pages作为路径的一部分)。
(3)Shared文件夹放一些通用的页面或布局页,一般以_开头来命名(名称以"_"开头的页面在浏览器中不可访问),
此外,Shared文件夹下的文件被其他页面引用的时候是不需要加"Shared"这个路径的。
项目建好后,我们不改动任何文件,直接运行项目,可以得到如下页面:
可以看到,页面中的Home和Privacy这2个超链接对应解决方案中Pages文件夹下的Index.cshtml和Privacy.cshtml这两个Razor页面,
每个可访问的Razor页面都有一个对应的.cs文件用于编码(在MVC框架中是用Controller来作为页面对应的代码文件的),
即页面和代码分离,这样的好处是页面/代码都很清晰,维护起来更容易。
打开Index.cshtml文件,其代码如下:
这里的代码很简单,似乎和页面呈现的内容不能完全对应,其代码只对应了红圈标识的部分:
这是因为该页面引用了Shared文件夹下的布局页"_Layout.cshtml",所有页面通用的部分在布局页中先定义好,
引用的页面只需要关注自身要展示的内容即可。
其中,
(1)@page 表示这个页面是可以被访问的,即在浏览器中输入指向该页面的路径时能被正常显示,没有@page指令的.cshtml页面不能被直接访问。
(2)@model IndexModel表示这个页面对应的Model是IndexModel,Model是页面和代码文件进行数据交换的载体,
一个.cshtml页面中只能有1条@model指令。
(3)@{
ViewData["Title"] = "Home page";
}
的作用是给ViewData["Title"]赋值,即页面的Title ,我们在浏览页面的时候可以看到如下:
因为Index.cshtml使用了布局文件,打开Shared文件夹下的布局文件_Layout.cshtml,可以看到对应的页面代码:
如果我们不想显示" - AuthManagement"这一段,只要在布局文件中去掉就可以了。
================================================================
另外,Razor框架的Pages文件夹下还约定了_ViewImports.cshtml和_ViewStart.cshtml这两个文件,其中的代码分别如下:
_ViewImports.cshtml
@using AuthManagement
@namespace AuthManagement.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
_ViewStart.cshtml
@{ Layout = "_Layout"; }
_ViewImports.cshtml用于给每个页面导入通用的指令信息,如果某个页面的指令不是通用的,在那个页面中单独导入就可以了。
_ViewStart.cshtml用来指定Razor页面要套用的布局文件,如果后续项目升级后换了一种风格,只需要改一下这个页面就可以了,
非常方便,默认情况下,在Pages文件夹下新增的每个Razor页面都会受到_ViewStart.cshtml的作用(即自动使用布局页),
如果不想使用布局页,只要在当前页面加入如下一行代码就可以了(见红色部分)
@page @model IndexModel @{ Layout = null; ViewData["Title"] = "Home page"; }
再次浏览页面,效果如下:
当然,如果不使用布局页,我们还需要在页面中将<html><head><body>等一个标准html文件中的标签进行补齐。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人