在TagHelper类和动态URL生成

时间:2016-10-27 16:47:50

标签: c# asp.net-core

我正在创建一个必须生成链接列表的TagHelper(在此示例中,TagHelper生成一个链接以使事情变得清晰)。 每个链接都必须调用控制器,操作,并根据API调用的结果传递参数。

控制器:

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

TagHelper:

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中,我包含了以下代码: services.AddSingleton<IHtmlHelper, HtmlHelper>();

如果我尝试运行此代码,则会收到错误消息。 InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Mvc.IUrlHelper' while attempting to activate 'Foo.TagHelpers.ContentTypeTagHelper'

1 个答案:

答案 0 :(得分:1)

IHtmlHelper与IUrlHelper不同。 实际上你需要注入的是IUrlHelperFactory和IActionContextAccessor,你可以用它来创建一个UrlHelper。

您可以看到示例here in my PagerTagHelper