ASP.NET Core 6中如何将SQL Server读取的字符串部分设为粗体?
解决方案
你的需求完全可以实现,问题出在Razor视图的HTML编码机制上——默认情况下,Razor会把输出的文本自动做HTML编码,导致你存在数据库里的<b>标签被转义成<b>,无法被浏览器解析为粗体格式。下面提供两种可行的解决办法:
方法一:直接输出未编码的HTML(适合数据库已存储带标签的内容)
在Razor视图中,用@Html.Raw()方法代替直接输出@col.Label,它会跳过HTML编码,让浏览器解析标签:
<div class="col-md-4"><label></label></div> @foreach (var col in Model.HistoryColumns) { <div class="col-md-2"><label>@Html.Raw(col.Label)</label></div> } </div>
⚠️ 注意:如果col.Label的内容来自用户输入,要警惕XSS攻击风险,确保内容是可信的(比如仅由后台维护,不允许用户提交自定义内容)。
方法二:后端处理字符串后输出(适合数据库存储原始文本)
如果不想在数据库里存储HTML标签,可以在后端读取数据后,动态给指定文本添加<b>标签,再传递到视图:
修改控制器代码:
// 先获取原始数据 var historyColumns = _HistoryLabelsRepository.EnabledColumns().ToList(); // 遍历处理每个标签文本 foreach (var col in historyColumns) { string targetText = "1st degree relative (18a)"; if (col.Label.Contains(targetText)) { // 替换目标文本为带粗体标签的内容 col.Label = col.Label.Replace(targetText, $"<b>{targetText}</b>"); } } var theViewModel = new TheViewModel { HistoryColumns = historyColumns, }; return View("History", theViewModel);
然后视图里同样使用@Html.Raw(col.Label)来输出处理后的内容。
如果需要处理多个不同的目标文本,可以把目标文本做成配置项(比如存到配置文件或数据库),让逻辑更灵活。
内容的提问来源于stack exchange,提问作者KevBarri
相关产品推荐
相关产品推荐

