gpt4 book ai didi

c# - 如何解决 IURLHelper 的问题(在 startup.cs 上添加单例不起作用)ASP.NET Core 2.2

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:10 25 4
gpt4 key购买 nike

我正在尝试为我的网站创建分页。我正在从 Adam Freeman 的书“ASP.NET Core 2”中学习。这些行:
IUrlHelper urlHelper = urlHelperFactory.GetUrlHelper(ViewContext);
TagBuilder result = new TagBuilder("div");

返回空值。有什么问题?

这是一个 asp.net core 2.2 应用程序。

无效的代码:

public override void Process(TagHelperContext context, TagHelperOutput output)
{
IUrlHelper urlHelper = urlHelperFactory.GetUrlHelper(ViewContext);
TagBuilder result = new TagBuilder("div");
for (int i = 1; i <= PageModel.TotalPages; i++)
{
TagBuilder tag = new TagBuilder("a");
tag.Attributes["href"] = urlHelper.Action(PageAction, new { ProductPage = i });
tag.InnerHtml.AppendHtml(tag);
}
output.Content.AppendHtml(result.InnerHtml);
}

我将其添加到 startup.cs 中:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IUrlHelper>(factory =>
{
var actionContext = factory.GetService<IActionContextAccessor>().ActionContext;
return new UrlHelper(actionContext);
});

我添加了一个单元测试,它应该返回一个 <a href="test/pageX"></a>对于所有页面,但它什么都不返回。

最佳答案

您错误地将 anchor 添加到自身,而是尝试将其添加到容器 div

TagBuilder result = new TagBuilder("div");
for (int i = 1; i <= PageModel.TotalPages; i++)
{
TagBuilder tag = new TagBuilder("a");
tag.Attributes["href"] = urlHelper.Action(PageAction, new { ProductPage = i });
// tag was being added to itself, rather add it the container `div`
// tag.InnerHtml.AppendHtml(tag);
result.InnerHtml.AppendHtml(tag);

}

关于c# - 如何解决 IURLHelper 的问题(在 startup.cs 上添加单例不起作用)ASP.NET Core 2.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57737234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com