下面我将为你提供一个从零开始、详细且可操作的指南,使用当前最主流和推荐的 .NET 8 和 Entity Framework Core (EF Core) 技术。

(图片来源网络,侵删)
我们将使用以下技术栈:
- 后端: .NET 8 (MVC 架构)
- 数据库: SQLite (轻量级,无需安装,非常适合本地开发)
- 前端: Razor Views (HTML + C#) + Bootstrap (快速美化界面)
- ORM: Entity Framework Core (简化数据库操作)
第零步:环境准备
在开始之前,请确保你的电脑上安装了以下软件:
- .NET 8 SDK: 从 Microsoft 官网 下载并安装。
- Visual Studio 2025: 强烈推荐使用 VS 2025 Community(免费版),在安装时,请确保勾选 “.NET 桌面开发” 工作负载,它包含了 ASP.NET 和 Web 开发所需的组件。
- SQLite: 我们将使用 SQLite 作为数据库,你需要安装两个东西:
- SQLite for .NET: VS 2025 安装时通常自带,如果没有,可以在 NuGet 包管理器中安装。
- SQLite Browser (可选): 一个免费的数据库管理工具,方便你查看和管理
.db3文件,可以从 DB Browser for SQLite 下载。
第一步:创建项目
- 打开 Visual Studio 2025。
- 点击 “创建新项目” (Create a new project)。
- 在模板搜索框中输入
ASP.NET Core Web App (Model-View-Controller),然后选择它并点击 “下一步”。 - 项目配置:
- 项目名称: 填写
MessageBoard(或你喜欢的名字)。 - 位置: 选择一个保存项目的文件夹。
- 解决方案名称: 可以和项目名一样。
- 取消勾选 “为 HTTPS 配置” (Configure for HTTPS),对于本地留言板,HTTP 完全够用,可以避免一些证书问题。
- 项目名称: 填写
- 点击 “创建”,Visual Studio 会为你生成一个基础的 MVC 项目结构。
第二步:设计数据模型
模型是表示你数据结构的类,对于留言板,我们需要一个 Message 类。
- 在
Models文件夹上右键 -> 添加 -> 类。 - 将类命名为
Message.cs。 - 粘贴以下代码:
// Models/Message.cs
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace MessageBoard.Models
{
public class Message
{
public int Id { get; set; } // 主键,EF Core 会自动识别
[Required(ErrorMessage = "请输入您的昵称")]
[StringLength(50)]
public string? Nickname { get; set; }
[Required(ErrorMessage = "留言内容不能为空")]
[StringLength(500)]
public string? Content { get; set; }
public DateTime PostTime { get; set; } = DateTime.Now; // 发布时间,默认为当前时间
}
}
代码解释:

(图片来源网络,侵删)
Id: 每条留言的唯一标识,EF Core 默认将其设为主键。Nickname: 留言者昵称。Content: 留言内容。[Required]: 数据注解,表示此字段是必填的。[StringLength(50)]: 限制字符串长度。PostTime: 发布时间,我们给它一个默认值DateTime.Now。
第三步:配置数据库连接
我们将使用 EF Core 的 Code-First 方式,通过代码来创建和管理数据库。
-
安装 EF Core 包:
- 在 “解决方案资源管理器” 中,右键点击你的项目 -> “管理 NuGet 程序包”。
- 在 “浏览” 选项卡中搜索
Microsoft.EntityFrameworkCore.Sqlite并安装。 - 再次搜索
Microsoft.EntityFrameworkCore.Design并安装,这个包在开发时提供了一些有用的命令。
-
创建数据库上下文:
- 数据库上下文是 EF Core 的核心,它负责连接数据库并操作
DbSet(数据表的集合)。 - 在
Models文件夹上右键 -> 添加 -> 类。 - 将类命名为
MessageBoardContext.cs。 - 粘贴以下代码:
- 数据库上下文是 EF Core 的核心,它负责连接数据库并操作
// Models/MessageBoardContext.cs
using Microsoft.EntityFrameworkCore;
namespace MessageBoard.Models
{
public class MessageBoardContext : DbContext
{
public MessageBoardContext(DbContextOptions<MessageBoardContext> options)
: base(options)
{
}
// DbSet 代表数据库中的一张表
public DbSet<Message> Messages { get; set; } = null!;
}
}
- 配置服务:
- 打开
Program.cs文件,这是 .NET 应用的入口点,我们在这里注册服务和配置数据库连接。 - 修改
Program.cs文件如下:
- 打开
// Program.cs
using MessageBoard.Models;
var builder = WebApplication.CreateBuilder(args);
// 1. 添加服务到容器 (DI - 依赖注入)
builder.Services.AddControllersWithViews();
// 2. 配置数据库上下文
// 使用 SQLite 数据库,数据库文件名为 messageboard.db3
builder.Services.AddDbContext<MessageBoardContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("MessageBoardConnection")));
var app = builder.Build();
// ... (其余代码保持不变)
- 添加连接字符串:
- 打开
appsettings.json文件。 - 在
Logging节点后面,添加ConnectionStrings节点:
- 打开
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"MessageBoardConnection": "Data Source=messageboard.db3"
}
}
"Data Source=messageboard.db3"告诉 EF Core,数据库文件将创建在项目根目录下的messageboard.db3。
第四步:创建数据库和迁移
我们将根据模型创建实际的数据库文件。

(图片来源网络,侵删)
- 打开 “程序包管理器控制台” (Package Manager Console),你可以在 Visual Studio 的 “视图” -> “其他窗口” 中找到它。
- 在 PMC 中,确保 “默认项目” 是你的
MessageBoard项目。 - 执行以下命令:
# 1. 创建一个“迁移”,EF Core 会检测模型变化,并生成创建/更新数据库的代码。 Add-Migration InitialCreate # 2. 应用迁移,EF Core 会根据上一步生成的代码,在本地创建 messageboard.db3 文件并创建表。 Update-Database
执行成功后,你可以在项目根目录下看到一个新的 messageboard.db3 文件,如果你安装了 SQLite Browser,可以打开它,会看到里面有一个 Messages 表,结构和我们定义的 Message 模型一致。
第五步:创建控制器和视图
MVC 架构的核心来了。
创建控制器
控制器负责处理用户请求,调用业务逻辑,并返回视图。
- 在 “解决方案资源管理器” 中,右键点击
Controllers文件夹 -> 添加 -> 控制器。 - 选择 “MVC 控制器 - 空”,然后点击 “添加”。
- 将控制器命名为
MessagesController.cs。 - 粘贴以下代码:
// Controllers/MessagesController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using MessageBoard.Models;
namespace MessageBoard.Controllers
{
public class MessagesController : Controller
{
private readonly MessageBoardContext _context;
// 通过构造函数注入数据库上下文
public MessagesController(MessageBoardContext context)
{
_context = context;
}
// GET: Messages
// 显示所有留言的列表页
public async Task<IActionResult> Index()
{
// 从数据库中获取所有留言,并按发布时间倒序排列
var messages = await _context.Messages.OrderByDescending(m => m.PostTime).ToListAsync();
return View(messages);
}
// GET: Messages/Create
// 显示创建留言的表单页
public IActionResult Create()
{
return View();
}
// POST: Messages/Create
// 处理提交的创建留言表单
[HttpPost]
[ValidateAntiForgeryToken] // 防止跨站请求伪造攻击
public async Task<IActionResult> Create([Bind("Nickname,Content")] Message message)
{
if (ModelState.IsValid) // 验证模型数据是否有效
{
message.PostTime = DateTime.Now; // 设置发布时间
_context.Add(message);
await _context.SaveChangesAsync(); // 保存到数据库
return RedirectToAction(nameof(Index)); // 重定向到留言列表页
}
return View(message);
}
}
}
创建视图
视图是用户看到的 HTML 页面。
- 创建列表页:
- 在
MessagesController中,右键点击Index方法 -> “添加视图”。 - 勾选 “使用布局页” (Use a layout page),选择
_Layout.cshtml。 - 模板选择 “列表” (List)。
- 数据类选择
MessageBoard.Models.Message。 - 点击 “添加”。
- Visual Studio 会生成
Views/Messages/Index.cshtml,你可以修改它,让界面更美观。
- 在
@* Views/Messages/Index.cshtml *@
@model IEnumerable<MessageBoard.Models.Message>
@{
ViewData["Title"] = "留言板";
}
<h1>@ViewData["Title"]</h1>
<p>
<a asp-action="Create" class="btn btn-primary">发表新留言</a>
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Nickname)
</th>
<th>
@Html.DisplayNameFor(model => model.Content)
</th>
<th>
@Html.DisplayNameFor(model => model.PostTime)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<strong>@Html.DisplayFor(modelItem => item.Nickname)</strong>
</td>
<td>
@Html.DisplayFor(modelItem => item.Content)
</td>
<td>
@item.PostTime.ToString("yyyy-MM-dd HH:mm")
</td>
</tr>
}
</tbody>
</table>
- 创建表单页:
- 在
MessagesController中,右键点击Create方法 -> “添加视图”。 - 勾选 “使用布局页”。
- 模板选择 “创建” (Create)。
- 数据类选择
MessageBoard.Models.Message。 - 点击 “添加”。
- Visual Studio 会生成
Views/Messages/Create.cshtml,这个文件通常可以直接使用,它已经包含了表单和验证逻辑。
- 在
第六步:运行和测试
- 按
F5或点击 Visual Studio 工具栏上的 “播放” 按钮,启动项目。 - 浏览器会自动打开,默认地址是
https://localhost:xxxx或http://localhost:xxxx。 - 你会看到一个空白页面,因为我们还没有设置首页。
- 修改
Program.cs,将留言板设为首页:
// Program.cs
// ... (前面的代码保持不变)
app.UseRouting();
app.UseAuthorization();
// 添加这一行,将 /Messages/Index 设为默认首页
app.MapControllerRoute(
name: "default",
pattern: "{controller=Messages}/{action=Index}/{id?}");
app.Run();
- 刷新浏览器,现在你应该能看到留言板的主页了,它会显示一个“发表新留言”的按钮。
- 点击按钮,填写昵称和留言内容,然后提交。
- 页面会跳转到列表页,你应该能看到你刚刚发布的留言了!
第七步:进阶与美化
一个基础的留言板已经完成了,但你可以让它变得更好:
-
美化界面:
- 我们已经使用了 Bootstrap,它被包含在
_Layout.cshtml中,你可以直接使用 Bootstrap 的类来美化你的Index.cshtml和Create.cshtml。 - 可以把留言列表放在一个卡片里,添加一些间距和阴影。
- 我们已经使用了 Bootstrap,它被包含在
-
增加功能:
- 删除功能: 在
MessagesController中添加Delete和DeleteConfirmed方法,并在Index.cshtml中为每条留言添加一个删除按钮。 - 分页: 当留言很多时,分页是必须的,可以使用
PagedList.MvcNuGet 包或Skip/Take方法手动实现。 - 搜索/筛选: 添加按昵称或内容搜索的功能。
- 管理员后台: 创建一个
Admin控制器,只有管理员才能访问,用于管理所有留言。
- 删除功能: 在
-
安全性增强:
- 防XSS攻击: 在显示用户输入的内容时,使用
@Html.Raw()或@Html.DisplayFor()要非常小心,更好的做法是使用@Html.Encode()或System.Net.WebUtility.HtmlEncode()对内容进行转义,防止恶意脚本注入,Razor 默认会对 输出进行 HTML 编码,这已经提供了基本的安全保障。 - 防机器人: 添加简单的验证码,防止程序自动发垃圾留言。
- 防XSS攻击: 在显示用户输入的内容时,使用
这个指南为你提供了一个完整的、可运行的 .NET 留言板项目,从创建项目到部署运行,每一步都有详细说明,祝你学习愉快!
