将 TagBuilder 核心方法从 ASP.NET MVC 5 迁移到 ASP.NET Core (.NET 5)

问题描述

我有一个用 ASP.NET MVC 5 开发的 Web 应用程序,我必须将它迁移到 ASP.NET Core (.NET 5)。我有一些 HtmlHelper 的扩展方法获取带有链接的字形图标:

public static MvcHtmlString GlyphiconActionLink(this HtmlHelper helper,string action,string controller,object parameters,string glyphiconTag,string title)
{
    TagBuilder span = new TagBuilder("span");
    span.MergeAttribute("class",$"glyphicon {glyphiconTag}");
    span.MergeAttribute("title",title);

    string url = UrlHelper.GenerateUrl(
        null,action,controller,new RouteValueDictionary(parameters),helper.RouteCollection,helper.ViewContext.RequestContext,true);

    TagBuilder link = new TagBuilder("a");
    link.MergeAttribute("href",url);
    link.InnerHtml = span.ToString(TagRenderMode.SelfClosing);

    return MvcHtmlString.Create(link.ToString());
}

在 Razor 页面中我可以写这个

@Html.GlyphiconActionLink("Details","MyController",new { id = model.Id },"glyphicon-pencil","Show to details")

获取此 HTML:

<a href="/mycontroller/details/1"><span class="glyphicon glyphicon-pencil" title="Details" /></a>

现在,在 .NET Core 中,这段代码不起作用,它有很多错误

我所做的改变:

  • 将值从 System.Web.Mvc.MvcHtmlString 返回到 Microsoft.AspNetCore.Html.HtmlString,返回 return new HtmlString(link.ToString());
  • link.InnerHtml = span.ToString(TagRenderMode.SelfClosing)link.InnerHtml.Append(span.ToString(TagRenderMode.SelfClosing))

我遇到的错误是:

  • UrlHelper.GenerateUrl:“GenerateUrl”由于其保护级别而无法访问。
  • helper.RouteCollection:“HtmlHelper”不包含“RouteCollection”的定义。
  • helper.ViewContext.RequestContext:“ViewContext”不包含“RequestContext”的定义。
  • span.ToString(TagRenderMode.SelfClosing)方法“ToString”没有重载需要 1 个参数。

您知道如何迁移吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)