我正在创建一个必须生成链接列表的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'
答案 0 :(得分:1)
IHtmlHelper与IUrlHelper不同。 实际上你需要注入的是IUrlHelperFactory和IActionContextAccessor,你可以用它来创建一个UrlHelper。
您可以看到示例here in my PagerTagHelper