2016-10-27 14 views
0

私は、リンクのリストを生成する必要があるTagHelperを作成しています(この例では、TagHelperは物をクリアするために単一のリンクを生成します)。 すべてのリンクでコントローラ、アクションを呼び出し、API呼び出しの結果に従ってパラメータを渡す必要があります。TagHelperクラスへのHtmlHelperの注入と動的URLの生成

コントローラー:

public class ContentController : Controller 
{ 
    public async Task<IActionResult> DoSomething(string typeOfContent) 
    { 
     ... 
    } 
} 

TagHelper: services.AddSingleton<IHtmlHelper, HtmlHelper>();

私はこのコードを実行しようとすると、私は受け取る:

public class ContentTypeTagHelper : TagHelper 
{ 
    public ContentTypeTagHelper(IUrlHelper urlHelper) 
    { 
     _urlHelper = urlHelper; 
    } 

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) 
    { 
     output.TagName = null; 
     output.TagMode = TagMode.SelfClosing; 

     string contentType = SomeApiCall.GetContentTypes(); 

     // this is the correct way to do this? 
     var url = _urlHelper.Action("DoSomething", "ContentController", new {typeOfContent = contentType}); 
    } 
} 

とStartup.csで

は、私は次のコードが含まれてエラー。 InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Mvc.IUrlHelper' while attempting to activate 'Foo.TagHelpers.ContentTypeTagHelper'

答えて

1

IHtmlHelperはIUrlHelperと同じではありません。 実際に注入する必要があるのはIUrlHelperFactoryとIActionContextAccessorで、これを使用してUrlHelperを作成できます。

例を見ることができます。here in my PagerTagHelper

+0

Tks Startup.csから 'services.AddSingleton 'を削除し、次にTagHelperクラスのコンストラクタで 'IActionContextAccessor actionContextAccessor'と' IUrlHelperFactory urlHelperFactory'を配置しました。私の 'ProcessAsync'メソッドでは' IUrlHelper = urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); 'を使い、URLを生成するために' var url = urlHelper.Action( "MethodName"、 "ClassName"、params) ; ' –

関連する問題