ASP.NET Core 基础 - Razor Pages Web 应用

news2024/11/24 15:35:12

目录

一. 创建项目

二. 检查项目文件

三. 添加模型

四. 添加数据

五. 基架

六. 使用数据库

七. 总结



一. 创建项目

新建项目

点击运行

二. 检查项目文件

Pages 文件夹

包含 Razor 页面和支持文件。 每个 Razor 页面都是一对文件:

  • 一个 .cshtml 文件,其中包含使用 Razor 语法的 C# 代码的 HTML 标记。
  • 一个 .cshtml.cs 文件,其中包含处理页面事件的 C# 代码。

支持文件的名称以下划线开头。 例如,_Layout.cshtml 文件可配置所有页面通用的 UI 元素。 _Layout.cshtml 设置页面顶部的导航菜单和页面底部的版权声明。 有关详细信息,请参阅 ASP.NET Core 中的布局。

wwwroot 文件夹

包含静态资产,如 HTML 文件、JavaScript 文件和 CSS 文件。 有关详细信息,请参阅 ASP.NET Core 中的静态文件。

appsettings.json

包含配置数据,如连接字符串。 有关详细信息,请参阅 ASP.NET Core 中的配置。

Program.cs

创建一个带有预配置默认值的 WebApplicationBuilder,向依赖关系注入 (DI) 容器添加 Razor Pages 支持,并生成应用.

下列代码会启用各种中间件:

  • app.UseHttpsRedirection();:将 HTTP 请求重定向到 HTTPS。
  • app.UseStaticFiles();:使能够提供 HTML、CSS、映像和 JavaScript 等静态文件。 有关详细信息,请参阅 ASP.NET Core 中的静态文件。
  • app.UseRouting();:向中间件管道添加路由匹配。 有关详细信息,请参阅 ASP.NET Core 中的路由
  • app.MapRazorPages();:为 Razor Pages 配置终结点路由。
  • app.UseAuthorization();:授权用户访问安全资源。 此应用不使用授权,因此可删除此行。
  • app.Run();:运行应用。

三. 添加模型

新建一个文件夹Models

新建一个Movie.cs

using System.ComponentModel.DataAnnotations;

namespace WebRazor.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
}

Movie 类包含:

  • 数据库需要 ID 字段以获取主键。

  • [DataType] 属性,用于指定 ReleaseDate 属性中的数据类型。 通过此特性:

    • 用户无需在日期字段中输入时间信息。
    • 仅显示日期,而非时间信息。
  • string 后的问号表示属性可为空

创建“Pages/Movies”文件夹

右键单击 Pages/Movies 文件夹 >“添加”>“已搭建基架的新项”。

在“添加新基架”对话框中,依次选择“使用实体框架的 Razor Pages (CRUD)”>“添加”。

完成“添加使用实体框架的 Razor 页面 (CRUD)”对话框:

  1. 在“模型类”下拉列表中,选择“Movie (WebRazor.Models)” 。
  2. 在“数据上下文类”行中,选择 +(加号)。
    1. 在“添加数据上下文”对话框中,生成类名 WebRazor.Data.WebRazorContext
    2. 在“数据库提供程序”下拉列表中,选择“SQL Server”。
  3. 选择 添加 。

点击添加

四. 添加数据

输入以下命令

Add-Migration InitialCreate

Update-Database

运行应用并将 /Movies 追加到浏览器中的 URL 

点击 Create

五. 基架

@page 指令

@pageRazor 指令将文件转换为一个 MVC 操作,这意味着它可以处理请求。 @page 必须是页面上的第一个 Razor 指令。 @page 和 @model 是转换为 Razor 特定标记的示例。

@model 指令指定传递到 Razor 页面的模型类型。 在前面的示例中,@model 行使 PageModel 派生的类可用于 Razor 页面。

OnGet 方法初始化页面所需的任何状态。 “创建”页没有任何要初始化的状态,因此返回 Page。 在本教程的后面部分中,将介绍 OnGet 初始化状态的示例。 Page 方法创建用于呈现 Create.cshtml 页的 PageResult 对象。

Movie 属性使用 [BindProperty] 特性来选择加入模型绑定。 当“创建”表单发布表单值时,ASP.NET Core 运行时将发布的值绑定到 Movie 模型。

当页面发布表单数据时,运行 OnPostAsync 方法:

六. 使用数据库

主要代码

builder.Services.AddDbContext<WebRazorContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("WebRazorContext") ?? throw new InvalidOperationException("Connection string 'WebRazorContext' not found.")));

ASP.NET Core 配置系统会读取 ConnectionString 键。 进行本地开发时,配置从 appsettings.json 文件获取连接字符串。

右键查看数据

七. 总结

一、核心概念与特点

  1. 页面模型
    • Razor Pages 采用了以页面为中心的开发模式。每个 Razor Page 由一个.cshtml文件(包含页面的视图部分,即 HTML 结构和 Razor 语法)和一个对应的.cs文件(包含页面的后台代码逻辑)组成。这种结构使得页面的视图和逻辑紧密结合,方便开发者进行页面级别的开发和维护。例如,一个简单的登录页面Login.cshtml及其对应的Login.cs文件,在.cshtml文件中可以定义登录表单的 HTML 结构,而在.cs文件中处理表单提交的验证和用户认证逻辑。
    • 它简化了基于页面的 Web 应用开发,特别适合小型到中型规模的项目或那些更注重页面级功能的应用。与传统的 MVC 架构相比,Razor Pages 对于简单的页面操作减少了一些概念上的复杂性,开发者可以更专注于单个页面的功能实现。
  2. 路由与页面导航
    • Razor Pages 有自己的路由机制,页面的 URL 与页面文件的结构和名称有一定的关联。这使得页面的路由更加直观,不需要像在 MVC 中那样通过控制器和动作的复杂映射来确定 URL。例如,一个位于Pages/Users/Edit.cshtml的页面,其默认的路由可能是/Users/Edit。这种直观的路由方式使得开发者更容易理解和管理页面的 URL 结构,方便进行页面之间的导航。
    • 页面之间的导航可以通过 HTML 链接、表单提交等方式实现,并且可以方便地传递参数。比如从一个用户列表页面点击某个用户的编辑链接,导航到用户编辑页面并传递用户的 ID 作为参数,在编辑页面中就可以根据这个 ID 加载相应的用户数据进行编辑操作。
  3. 数据绑定与验证
    • 在 Razor Pages 中,可以方便地进行数据绑定。页面模型可以直接与表单数据进行绑定,使得从用户输入获取数据并在后台代码中处理变得简单。例如,在一个创建用户的页面中,表单中的输入字段可以直接绑定到页面模型中的属性,当表单提交时,这些数据会自动填充到相应的属性中,方便后续的处理。
    • 它还提供了内置的验证功能。开发者可以通过数据注解等方式在页面模型的属性上定义验证规则,当表单提交时,框架会自动根据这些规则进行验证。如果验证失败,会自动显示相应的错误信息给用户,提高了数据输入的准确性和用户体验。例如,在一个用户注册页面中,可以通过[Required]等数据注解来确保用户名和密码等字段不能为空,通过[EmailAddress]注解来验证电子邮件格式是否正确。

二、开发流程与优势

  1. 开发流程
    • 创建项目:通过 Visual Studio 等开发工具可以快速创建一个 Razor Pages 项目模板,项目结构会自动包含必要的文件夹和文件,如Pages文件夹用于存放 Razor Page 文件,wwwroot文件夹用于存放静态资源等。
    • 页面开发:在Pages文件夹中创建新的 Razor Page 文件,编写.cshtml文件中的 HTML 结构和 Razor 语法,以及对应的.cs文件中的后台代码逻辑。可以利用内置的标签助手和 Razor 语法快速构建页面内容和处理业务逻辑。
    • 数据访问与处理:可以通过 Entity Framework Core 等数据访问技术与数据库进行交互。在页面的后台代码中,可以编写数据查询、插入、更新和删除等操作的代码,将数据从数据库中获取并展示在页面上,或者将用户输入的数据保存到数据库中。
    • 测试与部署:可以编写单元测试来测试 Razor Pages 的功能。在测试中,可以模拟 HTTP 请求并验证页面的响应是否符合预期。部署时,可以将应用程序部署到 IIS、Azure 等各种服务器或云平台上,利用 ASP.NET Core 的跨平台特性,实现灵活的部署方式。
  2. 优势
    • 快速开发:对于简单的页面导向型应用,Razor Pages 提供了一种简洁高效的开发方式。开发者可以快速创建和维护页面,减少了不必要的代码文件和配置。相比传统的 MVC 架构,在一些简单场景下开发效率更高,特别是对于不熟悉复杂架构的开发者来说更容易上手。
    • 良好的代码组织:页面相关的视图和逻辑代码集中在一个地方,使得代码的组织更加清晰。每个页面都有自己独立的代码文件,便于理解和维护。这对于团队开发尤其有利,不同开发者可以专注于不同的页面开发,减少代码冲突和混乱。
    • 与 ASP.NET Core 框架的集成:Razor Pages 是 ASP.NET Core 的一部分,充分利用了 ASP.NET Core 的各种特性和功能,如依赖注入、中间件、安全等。开发者可以方便地在 Razor Pages 应用中使用这些功能,实现功能丰富、安全可靠的 Web 应用。例如,可以轻松地在页面中集成身份验证和授权功能,保护页面的访问安全。

总之,ASP.NET Core Razor Pages Web 应用提供了一种简洁、高效且具有良好代码组织的开发方式,适用于多种规模的 Web 应用开发,尤其在页面导向型应用中具有独特的优势,能够帮助开发者快速构建功能完善的 Web 应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何白手起家?

作者:明王 日期:2016-07-1121:19 白手起家第一步&#xff0c;不是开公司&#xff0c;是脱离原生家庭&#xff0c;白手起家第二步&#xff0c;不是开公司&#xff0c;是挑个上升行业。白手起家第三步&#xff0c;不是开公司&#xff0c;是攒启动资金&#xff0c;白手起家笔四步&…

php反序列靶场serial

1.安装环境 2.使用kali扫描nat端口 3.使用物理机首先访问80端口&#xff0c;提示这里是新cookie进行程序测试&#xff0c;那我们查看cookie 4.f12查看&#xff0c;是一段base64编码 5.进行目录扫描 6.进入backup子目录发现有压缩包 7.下载bak.zip里面有三个源代码&#xff0…

单机部署ELK + Filebeat 收集应用日志

目录 前言一、ELK是什么&#xff1f;二、系统环境&#xff08;CentOS 7&#xff09;&#xff08;2C4G的机器。。。&#xff09;三、安装步骤3.1 安装ElasticSearch3.1.1 解压到/usr/local3.1.2 修改jvm堆配置&#xff08;可选&#xff0c;测试服务器内存低&#xff09;3.1.3 修…

C++初阶:类和对象(下)

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 1.再探构造函数 1.1构造函数体内赋值 之前…

Parsing error: The keyword ‘interface‘ is reserved配置优化

当我们在创建Vue项目时,Vue默认是配置了eslint代码规范检查的,不过我们在项目中Typescript来编写代码时,却报了标题的错误,对应的代码如下: <script lang="ts"> export default{name: "DlHeader" } </script><script setup lang=&quo…

利用OpenCvSharp进行图像相关操作

前言 程序设计过程&#xff0c;有时也需要对图像进行一些简单操作&#xff0c;C#没有现成的图像处理库&#xff0c;但有人对OpenCV进行了包装&#xff0c;我们可以很方便的使用OpenCvSharp对图像进行操作。当然了&#xff0c;这也需要使用的人员进行一些研究&#xff0c;但相对…

【C语言篇】猜数字游戏(赋源码)

文章目录 猜数字游戏前言随机数生成randsrandtime设置随机数生成范围 猜数字游戏的实现 猜数字游戏 前言 在前两篇博客对于分支和循环语句进行了详细的介绍&#xff1a; 分支语句详解 循环语句详解 我们就可以写一写稍微有趣的代码了&#xff0c;比如&#xff1a; 写一个…

用uniapp 及socket.io做一个简单聊天app 撤回聊天及保留聊天记录 6

撤回的设计 通过聊天&#xff0c;发送一个信息&#xff0c;界面自动将信息撤回&#xff0c; 当时要有时间的限制。同时也要将撤回记录到数据库中。async sendMessage(message, type text) {this.$refs.popup.close();const messageData {sn: uuidv4(),group_name: this.gro…

【MySQL】MySQL9.0发布,有点小失望

前言 &#x1f34a;缘由 MySQL一更新&#xff0c;实在有点闹心 &#x1f3c0;事情起因&#xff1a; 大家好&#xff0c;我是JavaDog程序狗 今天跟大家聊一下MySQL9.0新版本发布&#xff0c;仅代表个人观点&#xff0c;大佬DBA轻喷 &#x1f4d8;『你想听的故事 』 本狗在…

【python】Python中实现定时任务常见的几种方式原理分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

安全主机软件是如何有效应对暴力破解的?

在网络安全日益严峻的今天&#xff0c;暴力破解作为一种常见的攻击手段&#xff0c;时刻威胁着企业和个人的账户安全。为了有效抵御这一威胁&#xff0c;主机安全作为一款集实时监测、智能分析、风险预警于一体的主机安全软件&#xff0c;通过多维度、智能化的防护策略&#xf…

便携式气象监测系统的功能与应用

在科技日新月异的今天&#xff0c;气象监测作为农业生产、城市规划、环境保护及灾害预防等领域不可或缺的一环&#xff0c;正经历着前所未有的变革。其中&#xff0c;便携式气象监测系统的出现&#xff0c;如同一股清新的风&#xff0c;吹散了传统气象观测的种种限制&#xff0…

3.达梦数据库基础运维管理

文章目录 前言一、基础数据库管理权限角色管理1.1 DM 系统管理员的类型1.2 角色责则分类 DM 数据库2.1 数据库评估2.2 状态和模式 参考内容 前言 本篇博客为上一篇博客的进阶版&#xff0c;主要针对常规达梦数据库的基本管理上面 一、基础数据库管理 权限角色管理 1.1 DM 系…

【Git企业级开发实战指南②】分支管理、远程操作

目录 一、分支管理1.1理解分支1.2创建分支1.3切换分支1.4合并分支1.5删除分支1.6合并冲突1.7 分支管理策略1.7.1分支策略 1.8bug分支1.9删除临时分支 二、远程操作2.1理解分布式版本控制系统2.2 远程仓库2.2.1 新建远程仓库2.2.2 克隆远程仓库2.2.3向远端仓库推送2.2.4拉取远端…

ROS2 Humble 学习【openEuler】

ROS2 Humble 学习 1 介绍1.1 概述1.2 ROS2 详细介绍1.3 openEuler 安装 ROS2 Humble1.4 ROS2 系统架构 2 ROS2 基础2.1 节点编写、编译、运行【简单示例】节点编写节点编译 g节点运行节点编译 make节点编译 CMakeLists.txtCMake依赖查找流程Python 依赖查找流程 2.2 节点交互、…

MySQL深分页和浅分页

前言 最近有面试过也遇到了问关于深分页问题&#xff0c;在这里简单从MySQL、ES等方面分享一下自己对该问题认识和总结。 一、深分页定义 可以从ES定义上来划分浅分页和深分页的边界&#xff0c;即页数超过10000页为深分页&#xff0c;少于10000页为浅分页。 二、MySQL深分…

数字化时代:蚓链助力企业破局与腾飞!

在当今数字化浪潮汹涌澎湃的时代&#xff0c;企业面临着前新机遇与新挑战。您是否渴望在竞争激烈的市场中实现数字化弯道超车&#xff1f;是否梦想着打造专属自己的独特生意赛道&#xff1f;是否期盼着拥有专享的资源生态圈&#xff1f;如果您的答案是肯定的&#xff0c;那么蚓…

CSP - J day9

一. 题目 &#xff08;1&#xff09;早安 思路&#xff1a; &#xff08;1&#xff09;cin和scanf读入字符串时遇到空格或换行就停止读入&#xff0c;对于要读入带空格的字符串时&#xff0c;常用 两种方法&#xff1a; // 法一string s;getline( cin, s ); // 法…

OrangePi AIpro学习1 —— 烧写和ssh系统

目录 一、下载烧写工具和系统 二、烧写和启动 2.1 烧写和启动 2.2 烧写失败后的问题解决 三、串口连接到主机 3.1 串口连接到主机 四、网络连接到主机 4.1 修改香橙派IP地址 4.2 win11配置以太网静态ip 4.4 主机和香橙派直连 4.5 主机和香橙派连接到同一个路由器 五…

Hive SQL进阶:掌握间隔连续查询技巧,优化大数据分析(二)

目录 1.访问次数最多的5个用户 2.近 30 天的每日活跃用户数 3.获取1-180天注册活跃留存表 4.学生名次统计 5.最近连续3周连续活跃用户数 6.最近7天内连续3天活跃用户数 7.餐馆营业额变化增长 相关拓展 1.访问次数最多的5个用户 输出每个app 下访问次数最多的5个用户 返…