c# - ASP.NET:标签助手不起作用。从哪里开始调试?
问题描述
我正在阅读 Adam Freeman “Pro ASP.NET Core MVC 2”一书并关注该书的项目 SportsStore。我在使用标签助手时遇到问题,当我运行项目时,底部的导航链接不起作用,而是在页面源代码中看到标签助手:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>SportsStore V2</title>
</head>
<body>
<div>
<div>
<h3>Kayak</h3>
A boat for one person
<h4>275,00 €</h4>
</div>
<div>
<h3>Lifejacket</h3>
Protective and fashionable
<h4>48,95 €</h4>
</div>
<div>
<h3>Soccer Ball</h3>
FIFA-approved size and weight
<h4>19,50 €</h4>
</div>
<div>
<h3>Corner Flags</h3>
Give your playing field a professional touch
<h4>34,95 €</h4>
</div>
<div page-model="SportsStoreApp.Models.ViewModels.PagingInfo" page-action="List"></div>
</div>
</body>
</html>
List.cshtml的代码
@model ProductListViewModel
@foreach (var p in Model.Products)
{
<div>
<h3>@p.Name</h3>
@p.Description
<h4>@p.Price.ToString("c")</h4>
</div>
}
<div page-model="@Model.PagingInfo" page-action="List"></div>
PageLinkTagHelper 类的代码
namespace SportsStoreApp.Infrastructure
{
[HtmlTargetElement("div", Attributes = "page-model")]
public class PageLinkTagHelper : TagHelper
{
private IUrlHelperFactory urlHelperFactory;
public PageLinkTagHelper(IUrlHelperFactory helperFactory)
{
urlHelperFactory = helperFactory;
}
[ViewContext]
[HtmlAttributeNotBound]
public ViewContext ViewContext { get; set; }
public PagingInfo PageModel { get; set; }
public string PageAction { get; set; }
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.Append(i.ToString());
result.InnerHtml.AppendHtml(tag);
}
output.Content.AppendHtml(result.InnerHtml);
}
}
}
由于我没有 ASP.NET 和 MVC 的经验,我不明白我应该如何开始解决这个问题?
PS我尝试从头开始重写,没有结果。
解决方案
我已经跳到关于 TagHelpers 的章节,并且写了实际注册 taghelper 的含义,这是一个命名问题/错字/范围错误。
当我在 _ViewsImport 中注册 TagHelper 时,我使用了他书中的程序集名称 - SportsStore。但是在我的项目中,我想区分解决方案名称和项目名称,所以我的解决方案名称是 SportsSotreV2 和项目名称(程序集名称)SportsStoreApp。如此变化
@addTagHelper SportsStoreApp.Infrastructure.*, SportsStore
至
@addTagHelper SportsStoreApp.Infrastructure.*, SportsStoreApp
解决了这个问题。
推荐阅读
- python - 如何在python的无限循环中每X次只调用一次函数?
- php - 试图在 Jenkins 中执行测试,但供应商目录不存在
- amazon-web-services - 如何将参数从 CloudFormation 传递到存储在 S3 存储桶中的 AWS Lambda 函数
- c# - 使用 sonarqube 跨多个项目文件进行代码覆盖率分析
- python - Mxnet - 慢速数组复制到 GPU
- kotlin - 当 n 为 Long 时,如何在 Kotlin 中重复字符串 n 次
- frameworks - 更改 podspec 上的 repo 的正确方法是什么?
- mysql - MySQL:查询中的 id 列表
- sas - 保留宏创建的变量
- swift - 关于属性更改 SwiftUI 的动画视图