2017-08-04 4 views
1

Ich frage mich, ob jemand mit dem Demonstrieren helfen kann, wie ich einen HTMLContent oder HtmlString in ASP.NET Core erstellen, ähnlich wie ich es in MVC5 getan habe. Normalerweise würde ich eine neue MvcHtmlString Methode innerhalb einer Helper Klasse erklären, wie so:So erstellen Sie eine MVC5 MvcHtmlString in ASP.NET Core

HtmlExtender.cs

Um in einer Ansicht zu verwenden wäre @Html.MenuLink("Home", "Home", "Index", "", "Home") auch die Einbeziehung von @using WebApplication1.Helpers an der Spitze des View .

Ich bin unsicher in Bezug auf die Verwendung von HtmlString oder IHtmlContent zu erreichen, was ich brauche, aber meine Methode erfordert Zugriff auf die HttpContextAccessor, aber ich bin ein wenig unsicher, wie dies zu tun ist.

Ich habe den HttpContextAccessor in der Startup.cs deklariert, wie ich in ASP.NET Core 2.0 glaube, ist es nicht wie unten gezeigt standardmäßig deklariert, sondern Hilfe wie in der Hilfsmethode zu verwenden.

Startup.cs

public void ConfigureServices(IServiceCollection serviceCollection) 
{ 
    serviceCollection.AddMvc(); 
    serviceCollection.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
} 

Jede Hilfe sehr geschätzt werden würde :-)

Antwort

1

Die neuen Primitiven in MVC Core sind schön und einfach zu bedienen. Der TagBuilder implementiert IHtmlContent, der überall dort verwendet werden kann und sollte, wo Sie gerade MvcHtmlString verwenden. Für das obige Beispiel entfernen Sie einfach MvcHtmlString.Create und geben den TagBuilder direkt zurück (Anpassung für die Rückgabe von IHtmlContent).

Andere nützliche Klassen sind HtmlContentBuilder, ein anderer Typ, der IHtmlContent zurückgibt, der AppendHtml ähnlich wie StringBuilder, aber speziell für HTML-Inhalt. Sie können viele Tag-Builder anhängen, was sehr praktisch ist.

Das ist theoretisch, was Sie suchen (ich bin diese GetUrlHelper Erweiterung woanders gefunden, ich vergesse wo).

public static IUrlHelper GetUrlHelper(this IHtmlHelper html) 
    { 
     var urlFactory = html.ViewContext.HttpContext.RequestServices.GetRequiredService<IUrlHelperFactory>(); 
     var actionAccessor = html.ViewContext.HttpContext.RequestServices.GetRequiredService<IActionContextAccessor>(); 
     return urlFactory.GetUrlHelper(actionAccessor.ActionContext); 
    } 
    public static IHtmlContent MenuLink(this IHtmlHelper htmlHelper, string linkText, string controller, string action, string area, string anchorTitle) 
    { 

     var urlHelper = htmlHelper.GetUrlHelper(); 

     var url = urlHelper.Action(action, controller, new { area }); 

     var anchor = new TagBuilder("a"); 
     anchor.InnerHtml.Append(linkText); 
     anchor.MergeAttribute("href", url); 
     anchor.Attributes.Add("title", anchorTitle); 

     var listItem = new TagBuilder("li"); 
     listItem.InnerHtml.AppendHtml(anchor); 

     if (CheckForActiveItem(htmlHelper, controller, action, area)) 
     { 
      listItem.GenerateId("menu_active", "_"); 
     } 

     return listItem; 
    } 
Verwandte Themen