ASP.NET Web Pages 教程(千字长文)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Web 开发领域,ASP.NET Web Pages 是一个轻量级且易于上手的框架,特别适合快速构建小型到中型的动态网站。它以 Razor 语法为核心,结合了 HTML、C# 和服务器端逻辑,让开发者能够以简洁的方式实现功能。无论是个人博客、企业官网,还是简单的电子商务平台,ASP.NET Web Pages 都能提供高效灵活的解决方案。

本教程面向编程初学者和中级开发者,通过循序渐进的讲解和实际案例,帮助读者掌握从环境搭建到项目部署的全流程。文中将穿插代码示例、形象比喻和常见问题解答,确保知识点易于理解。


环境搭建与第一个 Web Pages 程序

开发环境准备

要开始开发 ASP.NET Web Pages 项目,需安装以下工具:

  1. Visual StudioVisual Studio Code(推荐);
  2. .NET SDK(可从 .NET 官网 下载)。

示例:创建第一个 Web Pages 项目

  1. 打开 Visual Studio,选择 Create a new project
  2. 在模板中搜索 ASP.NET Web Application,选择 Web Application (Razor Pages)
  3. 输入项目名称并配置选项,点击 Create

项目创建完成后,会在 Pages 文件夹下看到默认的 Index.cshtml 文件。这是一个典型的 Razor 文件,其扩展名 .cshtml 表示它混合了 HTML 和 C# 代码。

@page  
@model IndexModel  
@{  
    ViewData["Title"] = "Home Page";  
}  

<h1>Welcome to ASP.NET Web Pages!</h1>  
<p>这是一个动态生成的页面,您可以通过 C# 代码控制内容。</p>  

Razor 语法解析

Razor 是 ASP.NET Web Pages 的核心语法,通过 @ 符号区分 HTML 和服务器端代码。例如:

  • @DateTime.Now:直接输出当前时间。
  • @if (条件) { ... }:在页面中执行条件判断。

比喻:可以将 Razor 语法想象为一座桥梁,它连接了 HTML 的静态内容和 C# 的动态逻辑,让开发者在同一个文件中自由切换两者的使用场景。


基础语法与页面逻辑

变量与循环

在 Razor 文件中,可以通过 @{ ... } 声明代码块,例如:

@page  
@{  
    var message = "Hello, World!";  
    var numbers = new List<int> { 1, 2, 3, 4, 5 };  
}  

<p>@message</p>  

<ul>  
    @foreach (var num in numbers)  
    {  
        <li>@num</li>  
    }  
</ul>  

页面间导航

通过 @Html.ActionLink 方法生成导航链接:

@Html.ActionLink("跳转到关于页面", "About", "Home")  

:这里的 "Home" 是控制器名称,"About" 是方法名称。


数据访问与数据库集成

连接数据库

ASP.NET Web Pages 支持通过 ADO.NETEntity Framework 访问数据库。以下是一个简单的 SQL Server 示例:

@page  
@{  
    string connectionString = "Server=localhost;Database=MyDB;Trusted_Connection=True";  
    var db = Database.Open(connectionString);  

    var command = "SELECT * FROM Users";  
    var reader = db.Query(command);  
}  

<table>  
    <tr>  
        <th>ID</th>  
        <th>Name</th>  
    </tr>  
    @foreach (var row in reader)  
    {  
        <tr>  
            <td>@row.ID</td>  
            <td>@row.Name</td>  
        </tr>  
    }  
</table>  

参数化查询与安全性

为防止 SQL 注入攻击,应使用参数化查询:

var command = "SELECT * FROM Users WHERE ID = @ID";  
var parameters = new { ID = 1 };  
var reader = db.Query(command, parameters);  

路由与 URL 重写

默认路由配置

ASP.NET Web Pages 的路由规则默认存储在 Startup.cs 文件中。例如:

app.UseEndpoints(endpoints =>  
{  
    endpoints.MapRazorPages();  
});  

自定义路由

通过修改 Startup.cs,可以实现更灵活的 URL 映射:

endpoints.MapRazorPages()  
    .AddRazorPagesOptions(options =>  
    {  
        options.Conventions.AddAreaFolderRouteModelConvention(  
            "/Blog", "/{year}/{month}/{slug}");  
    });  

路由规则示例

URL 格式对应的页面路径
/blog/2023/08/my-post/Pages/Blog/Post.cshtml

表单处理与用户输入验证

创建表单

在 Razor 文件中定义 HTML 表单:

@page  
<form method="post">  
    <label>用户名:<input type="text" name="username" /></label>  
    <button type="submit">提交</button>  
</form>  

@if (IsPost)  
{  
    var username = Request.Form["username"];  
    <p>您输入的用户名是:@username</p>  
}  

模型绑定与验证

使用 [BindProperty] 特性简化数据绑定:

@page  
@model MyPageModel  

<label>邮箱:<input type="email" asp-for="Email" /></label>  
<span asp-validation-for="Email"></span>  

@functions {  
    [BindProperty]  
    public string Email { get; set; }  

    public void OnPost()  
    {  
        if (!ModelState.IsValid)  
        {  
            return Page();  
        }  
        // 处理逻辑  
    }  
}  

安全性与身份验证

防止跨站脚本(XSS)

使用 Html.Encode 或 Razor 的自动编码功能:

<p>@Html.Encode(userInput)</p>  
<!-- 或直接 -->  
<p>@userInput</p>  // Razor 默认会自动编码  

授权与身份验证

通过 Authorize 特性限制页面访问:

@attribute [Authorize]  
@page  
...  

实战案例:构建简易博客系统

需求分析

实现以下功能:

  1. 显示文章列表;
  2. 用户登录后可发布新文章;
  3. 文章按分类筛选。

代码实现

1. 文章模型

public class Article  
{  
    public int ID { get; set; }  
    public string Title { get; set; }  
    public string Content { get; set; }  
    public DateTime PublishedAt { get; set; }  
}  

2. 列表页面(Articles.cshtml)

@page  
@model ArticlesModel  

@foreach (var article in Model.Articles)  
{  
    <div class="article">  
        <h2>@article.Title</h2>  
        <p>@article.Content</p>  
        <small>发布于:@article.PublishedAt.ToShortDateString()</small>  
    </div>  
}  

3. 发布文章表单(Create.cshtml)

@page  
@model CreateModel  

<form method="post">  
    <label>标题:<input type="text" asp-for="Article.Title" /></label>  
    <label>内容:<textarea asp-for="Article.Content"></textarea></label>  
    <button type="submit">发布</button>  
</form>  

@functions {  
    [BindProperty]  
    public Article Article { get; set; }  

    public IActionResult OnPost()  
    {  
        if (!ModelState.IsValid)  
            return Page();  

        // 保存到数据库  
        return RedirectToPage("Articles");  
    }  
}  

结论

通过本教程,您已掌握了 ASP.NET Web Pages 的核心概念、语法和实战技巧。从环境搭建到数据访问,再到安全性与项目部署,每个环节都通过代码示例和比喻进行了深入浅出的讲解。

下一步建议

  1. 探索 Entity Framework Core,提升数据库交互能力;
  2. 学习 SignalR 实现实时通信;
  3. 参考微软官方文档,了解高级主题(如依赖注入、中间件)。

ASP.NET Web Pages 的灵活性和易用性使其成为快速开发的利器。希望本教程能为您打下坚实的基础,未来在 Web 开发领域不断探索创新!

最新发布