如何将常规字符串转为IHtmlString?AspNetCore类型转换报错排查
问题根源与解决方法
你遇到的问题核心是混用了ASP.NET Framework和ASP.NET Core两个不同框架的类型:
- 你引用的
System.Web.IHtmlString是旧版ASP.NET Framework的类型 - 而
Microsoft.AspNetCore.Html.HtmlString属于ASP.NET Core框架,两者分属不同程序集,没有兼容关系,自然无法互相转换或赋值
微软的示例代码是对应各自框架实现的:ASP.NET Core版本的Raw方法返回的是该框架命名空间下的IHtmlString(或IHtmlContent),而非System.Web下的类型,所以能正常运行。
修复步骤
- 移除不必要的命名空间引用:删除代码中的
using System.Web;,ASP.NET Core项目不需要这个旧框架的命名空间。 - 统一类型归属:将方法的返回类型改为ASP.NET Core框架下的
Microsoft.AspNetCore.Html.IHtmlString,或者更通用的IHtmlContent(HtmlString已实现这个接口,ASP.NET Core推荐使用IHtmlContent)。
修正后的代码示例
using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.Rendering; public static class HtmlHelperExtensions { public static IHtmlString Text(this IHtmlHelper helper, string text) { return new HtmlString(TextToHtml.Transform(text)); } }
或者使用更通用的IHtmlContent:
using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.Rendering; public static class HtmlHelperExtensions { public static IHtmlContent Text(this IHtmlHelper helper, string text) { return new HtmlString(TextToHtml.Transform(text)); } }
另外你尝试强制转换失败是必然的,因为两个IHtmlString是完全不同的类型,没有继承或实现关系,无法通过强制转换兼容。
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

