当前位置: 首页 > news >正文

跟着AI学习C#之项目实践Day5

📅 Day 5:实现评论系统(Comment System)

✅ 今日目标:

  • 创建 Comment 模型
  • 实现用户对文章发表评论功能
  • 在文章详情页显示评论列表
  • 支持登录用户才能评论
  • 提交 Git 版本记录进度

🧱 一、创建 Comment 模型

Models/Comment.cs

using System;namespace MyBlog.Models
{public class Comment{public int Id { get; set; }public string Content { get; set; } = string.Empty;public string AuthorId { get; set; } = string.Empty;public string? AuthorName { get; set; }public int PostId { get; set; }public Post? Post { get; set; }public DateTime CreatedAt { get; set; } = DateTime.Now;}
}

🔌 二、将 Comment 添加到 ApplicationDbContext

✅ 修改 Data/ApplicationDbContext.cs

public DbSet<Comment> Comments { get; set; }

🧪 三、创建数据库迁移并更新数据库

在 Package Manager Console 中运行:

Add-Migration AddCommentTable
Update-Database

这将在数据库中创建 Comments 表。


✏️ 四、修改文章详情页面以支持评论

我们将在 Details.cshtml 页面中添加评论展示和提交表单。

✅ 修改 Pages/Posts/Details.cshtml.cs

注入 UserManager<IdentityUser>SignInManager<IdentityUser>

private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;public DetailsModel(ApplicationDbContext context, UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager): base(context)
{_userManager = userManager;_signInManager = signInManager;
}[BindProperty]
public Comment NewComment { get; set; } = new();public async Task<IActionResult> OnGetAsync(int? id)
{if (id == null){return NotFound();}Post = await _context.Posts.Include(p => p.Category).Include(c => c.PostTags).ThenInclude(t => t.Tag).Include(c => c.Comments).FirstOrDefaultAsync(m => m.Id == id);if (Post == null){return NotFound();}return Page();
}public async Task<IActionResult> OnPostAsync(int? id)
{if (!ModelState.IsValid || id == null){return await OnGetAsync(id);}if (!_signInManager.IsSignedIn(User)){ModelState.AddModelError(string.Empty, "请先登录再发表评论。");return await OnGetAsync(id);}var user = await _userManager.GetUserAsync(User);if (user == null){return RedirectToPage("/Account/Login");}var comment = new Comment{Content = NewComment.Content,PostId = id.Value,AuthorId = user.Id,AuthorName = user.UserName};_context.Comments.Add(comment);await _context.SaveChangesAsync();return RedirectToPage("/Posts/Details", new { id });
}

👁️‍🗨️ 五、在文章详情页展示评论与评论表单

✅ 修改 Pages/Posts/Details.cshtml

展示评论列表:
<h4>评论</h4>
@if (Model.Post.Comments != null && Model.Post.Comments.Any())
{foreach (var comment in Model.Post.Comments.OrderByDescending(c => c.CreatedAt)){<div class="card mb-2"><div class="card-body"><h6 class="card-subtitle mb-2 text-muted">@comment.AuthorName · @comment.CreatedAt.ToString("yyyy-MM-dd HH:mm")</h6><p class="card-text">@Html.Raw(comment.Content)</p></div></div>}
}
else
{<p>暂无评论。</p>
}
添加评论表单:
@if (_signInManager.IsSignedIn(User))
{<h5>发表评论</h5><form method="post"><div class="form-group"><textarea asp-for="NewComment.Content" class="form-control" rows="3"></textarea><span asp-validation-for="NewComment.Content" class="text-danger"></span></div><button type="submit" class="btn btn-primary mt-2">提交评论</button></form>
}
else
{<p><a asp-page="/Account/Login">登录</a> 后可以发表评论。</p>
}

🧩 六、可选优化建议

  • 添加 Markdown 解析支持(用于评论内容)
  • 添加评论分页(如果评论较多)
  • 添加删除评论功能(仅作者或管理员可操作)

📦 七、提交 Git 版本

git add .
git commit -m "Day5: Added Comment system with login check"

📝 今日总结

今天你完成了:

✅ 创建了 Comment 模型
✅ 配置 EF Core 关联关系
✅ 在文章详情页实现了评论展示与提交功能
✅ 增加登录权限判断,防止未登录评论
✅ 提交版本控制记录


📆 明日计划(Day6)

我们将继续增强功能:

  • 实现文章搜索功能(按标题、内容、作者)
  • 使用 LINQ 查询优化
  • 添加搜索框 UI
  • 可选:使用全文搜索引擎(如 Lucene.NET / Elasticsearch)
http://www.lqws.cn/news/505135.html

相关文章:

  • 从0开始学习R语言--Day31--概率图模型
  • Blaster - Multiplayer P162-PXX
  • 系统性能优化-4 磁盘
  • 【Bluedroid】蓝牙启动之 bta_dm_enable 流程梳理 源码解析
  • 【AI落地应用实战】Chaterm:重新定义终端操作的AI智能工具
  • C# WinForm跨平台串口通讯实现
  • ffmpeg下载地址
  • 数组题解——移除元素​【LeetCode】
  • Windows驱动开发最新教程笔记2025(一)名词解释
  • Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
  • From Tranformer to Decoder ONLY
  • 云原生周刊:Argo CD v3.1 正式发布
  • PyEcharts教程(009):PyEcharts绘制水球图
  • 【HTTP】取消已发送的请求
  • Leaflet面试题200道
  • C++修炼:智能指针
  • 自然语言处理入门
  • centos7 rpm 包升级openssh至10.0版本
  • 解码成都芯谷金融中心文化科技产业园:文化+科技双轮驱动
  • 枫清科技受邀参加2025数据智能大会
  • 如何通过nvm切换本地node环境详情教程(已装过node.js更改成nvm)
  • Vue3+el-table-v2虚拟表格大数据量多选功能详细教程
  • 字节跳动开源了一款 Deep Research 项目
  • YOLO、VOC、COCO数据集格式
  • C++中的数学计算库Eigen
  • LT8311EX一款适用于笔记本电脑,扩展坞的usb2.0高速运转芯片,成对使用,延伸长度达120米
  • EXCEL中实用的一些手段——BOM汇总查询
  • 【Datawhale组队学习202506】YOLO-Master task04 YOLO典型网络模块
  • 桥头守望者
  • 《前端资源守卫者:SRI安全防护全解析》