ASP.NET Core视图中Section Header显示异常问题排查
ASP.NET MVC 5 迁移至 ASP.NET Core 6 图标显示问题排查与修复
问题现象
将运行于.NET 4.8的ASP.NET MVC 5应用迁移至ASP.NET Core 6 MVC后,Index.cshtml中更新后的@section header代码改用@await Html.PartialAsync调用_ModeHeader.cshtml,预期页面显示图标+文本“Salaries”,但实际显示**“Normal”+文本“Salaries”**。
相关代码
原MVC 5代码
@section header { @Html.Partial("~/Views/Shared/DisplayTemplates/_ModeHeader.cshtml", Model.Mode, new ViewDataDictionary { { "text", "Salaries" }, { "icon", "fa-money-check" } }) }
更新后的ASP.NET Core代码
@section header { @await Html.PartialAsync("~/Views/Shared/DisplayTemplates/_ModeHeader.cshtml", Model.Mode, new ViewDataDictionary(ViewData) { { "text", "Salaries" }, { "icon", "fa-money-check" } }) }
_ModeHeader.cshtml代码
@using Project.Extensions.MVC @using Project.Models @model Enums.Mode @{ if (!ViewData.ContainsKey("icon")) { ViewData["icon"] = "fa-list-alt"; } } <div class="border-bottom row"> <div class="col"> <span class="h1"> @switch (Model) { case Enums.Mode.None: break; case Enums.Mode.Browse: @IconExtensions.BuildColoredIconTag(ViewData["icon"].ToString(), "text-info") break; default: throw new ArgumentOutOfRangeException(); } @ViewData["text"] </span> </div> </div>
存在问题的IconExtensions.cs代码片段
public static HtmlString BuildColoredIconTag(string iconName, string color) { var icon = BuildInternalColoredIconTag(iconName, color); var finalHtml = icon.TagRenderMode.ToString();// 错误行:此处应调用icon.ToString(TagRenderMode.Normal) return new HtmlString(finalHtml); }
问题根源
错误代码中调用icon.TagRenderMode.ToString()会返回TagRenderMode枚举的字符串值(即“Normal”),而非生成正确的图标HTML标签。原MVC 5中使用icon.ToString(TagRenderMode.Normal)来生成图标对应的HTML,迁移时未正确转换这个调用逻辑,导致输出了枚举名称而非预期的图标元素。
修复方案
将IconExtensions.cs中的错误行替换为:
var finalHtml = icon.ToString(TagRenderMode.Normal);
内容的提问来源于stack exchange,提问作者csharpdev
相关产品推荐
相关产品推荐

