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'
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) ; ' –