ASP.NET: тег-помощник не работает. С чего начать отладку? - PullRequest
0 голосов
/ 16 ноября 2018

Я читаю книгу Адама Фримена "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 &#x20AC;</h4>
    </div>
    <div>
        <h3>Lifejacket</h3>
        Protective and fashionable
        <h4>48,95 &#x20AC;</h4>
    </div>
    <div>
        <h3>Soccer Ball</h3>
        FIFA-approved size and weight
        <h4>19,50 &#x20AC;</h4>
    </div>
    <div>
        <h3>Corner Flags</h3>
        Give your playing field a professional touch
        <h4>34,95 &#x20AC;</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 Я пытался переписать с нуля, безрезультатно.

1 Ответ

0 голосов
/ 17 ноября 2018

Я перепрыгнул к главе о TagHelpers и там было написано, что на самом деле означает регистрация taghelper, это была проблема с именами / опечатка / ошибка области.

Когда я зарегистрировал TagHelper в _ViewsImport, яиспользовал название сборки из книги - SportsStore.Но в моем проекте я хотел провести различие между именем решения и именем проекта, поэтому моим именем решения было SportsSotreV2 и имя проекта (имя сборки) SportsStoreApp.Так что изменение

@ addTagHelper SportsStoreApp.Infrastructure. *, SportsStore

на

@ addTagHelper SportsStoreApp.Infrastructure. *, SportsStoreApp

решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...