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

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

📅 Day 3:支持 Markdown 写作 + 文章详情页展示

✅ 今日目标:

  • 在文章编辑中支持 Markdown 编写
  • 实现文章详情页面(渲染 Markdown 为 HTML)
  • 显示作者信息(关联 Identity 用户)
  • 简化 UI,添加导航菜单和样式优化
  • 提交代码并保存进度

🧰 一、引入 Markdown 解析库

我们使用 Markdig ——一个高性能的 Markdown 解析库。

✅ 安装 Markdig

在 NuGet 包管理器中安装:

Install-Package Markdig

或者使用命令行:

dotnet add package Markdig

📝 二、修改 Post 模型以支持 Markdown 渲染

✅ 更新 Models/Post.cs

using System;namespace MyBlog.Models
{public class Post{public int Id { get; set; }public string Title { get; set; }public string Content { get; set; } // 存储原始 Markdownpublic string AuthorId { get; set; }public DateTime CreatedAt { get; set; } = DateTime.Now;public DateTime? UpdatedAt { get; set; }// 新增属性:用于前端显示 HTMLpublic string RenderedContent => MarkdownToHtml(Content);private string MarkdownToHtml(string markdown){if (string.IsNullOrEmpty(markdown)) return "";var pipeline = new Markdig.MarkdownPipelineBuilder().UseAdvancedExtensions().Build();return Markdig.Markdown.ToHtml(markdown, pipeline);}}
}

👁️‍🗨️ 三、实现文章详情页展示

如果你之前使用了 Razor Page 的 CRUD 模板,Details.cshtml 应该已经生成好了。

✅ 修改 Pages/Posts/Details.cshtml

确保内容区域渲染的是 HTML 而不是纯文本:

<div>@Html.Raw(Model.Post.RenderedContent)
</div>

⚠️ 注意:@Html.Raw() 会直接输出 HTML,务必确保内容安全,防止 XSS 攻击。你可以在保存时对 Markdown 进行清理。


👤 四、关联用户信息(显示作者)

我们需要在文章页面中显示作者用户名。

✅ 修改 Pages/Posts/PagesModel.cs(如 IndexModel / DetailsModel)

注入 UserManager<IdentityUser>

private readonly UserManager<IdentityUser> _userManager;public IndexModel(ApplicationDbContext context, UserManager<IdentityUser> userManager)
{_context = context;_userManager = userManager;
}

然后获取用户名:

public async Task<IActionResult> OnGetAsync()
{Posts = await _context.Posts.ToListAsync();foreach (var post in Posts){var user = await _userManager.FindByIdAsync(post.AuthorId);post.AuthorName = user?.UserName;}return Page();
}

你也可以扩展 Post 类,加上一个 AuthorName 属性:

public string AuthorName { get; set; }

🎨 五、美化 UI 页面

你可以使用 Bootstrap 或 Tailwind CSS 来美化页面。

✅ 推荐做法:

  1. 使用 _Layout.cshtml 统一布局
  2. 添加导航栏链接:
<ul class="navbar-nav"><li class="nav-item"><a class="nav-link" asp-page="/Posts/Index">文章列表</a></li><li class="nav-item"><a class="nav-link" asp-page="/Posts/Create">写新文章</a></li>
</ul>
  1. 添加基础样式或使用 Bootstrap CDN:
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">

📦 六、提交 Git 版本

git add .
git commit -m "Day3: Added Markdown support and improved article detail page"

📝 今日总结

今天你完成了:

✅ 引入 Markdown 支持
✅ 实现文章详情页并渲染 Markdown 为 HTML
✅ 关联 Identity 用户,显示文章作者信息
✅ 美化页面 UI 并添加导航菜单
✅ 提交版本控制记录


📆 明日计划(Day4)

我们将继续增强功能:

  • 实现分类(Category)与标签(Tag)功能
  • 支持多对多关系(EF Core 配置)
  • 在文章发布页中选择分类与标签
  • 在首页按分类筛选文章
http://www.lqws.cn/news/489151.html

相关文章:

  • 【Linux网络编程】序列化与反序列化
  • 1个翠绿联网状态指示灯,闪烁未连接,常亮连接正常;软件如何实现
  • 浅析std::atomic<T>::compare_exchange_weak和std::atomic<T>::compare_exchange_strong
  • 【C++】C++中的虚函数和多态的定义与使用
  • AI 领航设计模式学习:飞算 JavaAI 解锁单例模式实践新路径
  • PROFIBUS DP转ETHERNET/IP在热电项目中的创新应用
  • WinUI3入门9:自制SplitPanel
  • Java基础(三):逻辑运算符详解
  • 提高WordPress网站加载速度和用户体验
  • C# SolidWorks二次开发-实战2,解决SolidWorks2024转step文件名乱码问题
  • 【25】木材表面缺陷数据集(有v5/v8模型)/YOLO木材表面缺陷检测
  • 【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略
  • 干货分享 如何做好数据可视化?
  • Qt联合Halcon开发四:【详细图解】海康相机配置并链接测试
  • Zynq + FreeRTOS + YAFFS2 + SQLite3 集成指南
  • Windows电脑数据恢复终极指南:从原理到实战
  • el-cascader 设置可以手动输入也可以下拉选择
  • 性能监控与智能诊断系统的全流程
  • (LeetCode 面试经典 150 题) 27.移除元素
  • Java 类加载机制详解
  • Spring AI 项目实战(十二):Spring Boot +AI + DeepSeek + 百度OCR 公司发票智能处理系统的技术实践(附完整源码)
  • C++11 <array>从入门到精通
  • Git新建分支并同步到远程
  • 终端创建虚拟环境
  • Blazor-内置输入组件
  • 华为云 Flexus+DeepSeek 征文|增值税发票智能提取小工具:基于大模型的自动化信息解析实践
  • 2025 年焊接相机十大品牌测评:抗光耐高温解决方案深度解析
  • Three.js入门第一步:两种方式搭建你的3D项目[特殊字符]️
  • CentOS 上安装snmp
  • mac隐藏文件现身快捷键