Chuyển đổi Markdown sang HTML trong template Razor của ASP.NET Core
Ngày cập nhật: 2024-09-06 | Số lần xem: 1151 | Số từ: 489 | Phân loại: Windows
Tôi đã quen sử dụng Markdown để ghi chú, vì vậy khi chỉnh sửa nội dung tôi thường dùng định dạng này. Tuy nhiên, trên website thì lại cần hiển thị dưới dạng HTML.
Vì lý do đó, tôi đã tìm kiếm một thư viện C# hỗ trợ chuyển đổi Markdown sang HTML. Tôi đã phát hiện ra thư viện Markdig:
Tuy nhiên, việc sử dụng trực tiếp thư viện này trong file Razor (.cshtml) của ASP.NET Core MVC không hề đơn giản – bạn phải tự bọc thêm logic xử lý. Điều này khá phức tạp và mất thời gian. Vì thế, tôi đã tiếp tục tìm kiếm và chọn một thư viện được bọc sẵn dựa trên Markdig:
Hỗ trợ Markdown cho ASP.NET Core
Để cài đặt thư viện, bạn có thể chạy lệnh sau:
|
|
Sau khi cài đặt thành công, bạn sẽ thấy trong file .csproj
của dự án xuất hiện đoạn cấu hình mới như sau:
|
|
🔨 Sử dụng Westwind.AspNetCore.Markdown
trong .NET 8.0
Lưu ý rằng các ví dụ minh họa trong tài liệu chính thức thường hướng dẫn cho ASP.NET Core 3.0, nhưng cú pháp trong .NET 8 đã thay đổi đáng kể. Tôi đã dành thời gian nghiên cứu một số dự án trên GitHub để hiểu cách tích hợp đúng.
Dưới đây là cách sử dụng trong .NET 8:
Program.cs
|
|
Trong tệp Razor (.cshtml), ví dụ như Index.cshtml
, bạn có thể gọi như sau:
|
|
✅ Kết quả là nội dung Markdown sẽ được chuyển đổi thành HTML và hiển thị trên trang web.
❎ Lỗi thường gặp
Một lỗi phổ biến xảy ra khi bạn quên import namespace của thư viện trong cả file .cs
lẫn .cshtml
. Ví dụ:
|
|
và
|
|
Nếu không làm như trên, bạn có thể gặp các lỗi như:
|
|
Khi bạn không sử dụng Visual Studio hoặc các IDE thông minh như VSCode với tính năng gợi ý tự động, thì những lỗi như trên dễ bị bỏ sót hơn.
🌍 Xử lý Markdown trong tài nguyên đa ngôn ngữ (I18N)
Giả sử bạn đang sử dụng tài nguyên đa ngôn ngữ (internationalization - I18N) trong dự án và lưu trữ nội dung bằng Markdown. Khi muốn hiển thị nội dung này qua Razor, bạn có thể gặp lỗi kiểu dữ liệu:
cannot convert from ‘Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString’ to ‘string’
Nguyên nhân là vì phương thức ParseHtmlString()
yêu cầu đầu vào là chuỗi string
, nhưng Localizer["Content"]
trả về đối tượng LocalizedHtmlString
.
Cách giải quyết đúng là sử dụng thuộc tính .Value
để ép kiểu:
|
|
Hy vọng bài viết này giúp bạn hiểu rõ hơn về cách tích hợp và sử dụng Markdown trong ASP.NET Core Razor, cũng như tránh được những lỗi cơ bản khi làm việc với tài nguyên đa ngôn ngữ. Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại chia sẻ nhé!