2016-08-10 5 views
2

asp.netコアMVC HTMLヘルパー静的メソッドでHTMLヘルパーコンテキストからurlHelperを取得する方法を静的メソッド私はHtmlHelperのでHtmlHelperのコンテキストからurlHelperを取得するために使用私は<code>ASP.NET 5 RC1</code>でプロジェクトを持っている

public static IHtmlContent MyHtmlHelperMethod<TModel, TResult>(
      this IHtmlHelper<TModel> htmlHelper, 
      Expression<Func<TModel, TResult>> expression) 
    { 



     //get the context from the htmlhelper and use it to get the urlHelper as it isn't passed to the method from the view 
     var urlHelper = GetContext(htmlHelper).RequestServices.GetRequiredService<IUrlHelper>(); 

     var controller = htmlHelper.ViewContext.RouteData.Values["controller"].ToString(); 
     string myLink; 
     if (htmlHelper.ViewContext.RouteData.Values["area"] == null) 
     { 
      myLink= urlHelper.Action("index", controller); 

     } else 
     { 

      string area = htmlHelper.ViewContext.RouteData.Values["area"].ToString(); 
      myLink = urlHelper.Action("index", controller, new { area = area }); 

     } 
     string output = "<div><a href = \"" + myLink + "\" class=\"myclass\"><blabla></blabla>My Link</a></div>; 
     return new HtmlString(output.ToString()); 
    } 

しかしASP.NET Coreで、それはもはや作品と私はthis stackoverflowの答えに投稿されたソリューションは、しかし、私は私に呼び出す静的HTMLヘルパー・メソッドを使用しています、IUrlHelperFactoryを注入することであるランタイムエラーに

>InvalidOperationException: No service for type 'Microsoft.AspNetCore.Mvc.IUrlHelper' has been registered. 

を取得cshtmlであり、タグヘルパーで使用されるクラスではありません。

ASP.net Coreでコードを変更するにはどうすればよいですか?

答えて

4
はにあなたの元のコードを変更し

:解決のための

var urlHelperFactory = GetContext(htmlHelper).RequestServices.GetRequiredService<IUrlHelperFactory>(); 
var actionContext = GetContext(htmlHelper).RequestServices.GetRequiredService<IActionContextAccessor>().ActionContext; 
var urlHelper = urlHelperFactory.GetUrlHelper(actionContext); 
+0

おかげで、私はそれは美しいではないと言うようになったと私はこの少し楽にするためにasp.netのコア開発者のように持っています – Yepeekai

関連する問題