Использование помощников тегов Razor внутри вспомогательных функций настраиваемых тегов

Привет, это мой помощник по тегам

    [HtmlTargetElement("card")]
    public class CardTagHelper : TagHelper
    {
        public string Title { get; set; }
        public string Icon { get; set; }
        public string Url { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "CardTagHelper";
            output.TagMode = TagMode.StartTagAndEndTag;

            var preContent = new StringBuilder();
            preContent.AppendFormat($@"
                    <div class='card custom-card'>
                        <div class='card-header'>
                            <div class='card-title'>");

            if (Url != null)
            {
                preContent.AppendFormat($@"
                                <a asp-for='{Url}'>
                                    <div class='float-left return'>
                                        <i class='fas fa-arrow-alt-circle-left fa-lg'></i>
                                    </div>
                                </a>");
            }

preContent.AppendFormat($@"<i class='{Icon}'></i>
                                {Title}
                            </div>
                        </div>
                        <div class='card-body'>");

            var postContent = new StringBuilder();
            postContent.AppendFormat($@"                                   
                        </div>
                        <div class='card-footer'>
                        </div>
                    </div>");

            output.PreContent.SetHtmlContent(preContent.ToString());
            output.PostContent.SetHtmlContent(postContent.ToString());
        }
    }
}

на выходе будет карта bootstrap 4

<card title="myTitle" icon="myIcon" url="redirectUrl">

    // Content here

</card>

Моя проблема в том, что я хотел бы использовать asp-страницу вместо href в условной отображаемой строке для привязки, но когда я ее добавил, это не повлияло на нее или не было интерактивным.

ИЗМЕНИТЬ

Это мои viewimports, как и предполагалось, я попытался включить свой собственный помощник до Asp.Net Core.

@using MyProject
@namespace MyProject.Pages
@addTagHelper *, MyProject
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

person Jackal    schedule 25.06.2019    source источник
comment
Не должно быть никаких проблем с выводом taghelpers. Код, который вы выводите, тоже будет обработан. Однако вы, вероятно, столкнетесь с проблемой порядка операций. Обычно сначала делается ссылка на встроенную библиотеку taghelper ASP.NET Core, а затем на любые другие пользовательские библиотеки в _ViewImports.cshtml. Это означает, что встроенные помощники уже работали до того, как этот код появился. Ссылка на вашу библиотеку сначала должна решить эту проблему. Тем не менее, лучше не полагаться на другие помощники тегов именно по этой причине: слишком легко что-то сломать.   -  person Chris Pratt    schedule 25.06.2019
comment
Я пробовал, как вы сказали, и он все еще не позволяет мне щелкнуть nachor, как будто у него нет href, он показывает точно asp-страницу в инструментах разработчика браузера, что означает, что он не распознает его tho   -  person Jackal    schedule 25.06.2019
comment
Привет, @Jackal, удалось ли тебе решить эту проблему?   -  person Rahul    schedule 01.01.2020


Ответы (1)


Однако я не нашел статьи, в которой объяснялось бы, как мы можем использовать помощники тегов Razor внутри наших настраиваемых помощников тегов. но для моего решения мне пришлось использовать фактический тег href вместо помощника тега razor asp-for, как показано ниже.

    public string Url { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        var content = $@"<a class='nav-link text-dark' href='/{Url}'>{Title}</a>";
        output.TagName = "li";
        output.Content.SetHtmlContent(content);
        output.Attributes.Add("class", "nav-item");
    }

Помощник тегов Razor вёл себя так же, как и для вас, @Jackal. HTML сгенерирован, как показано ниже -

<li class="nav-item"><a class="nav-link text-dark" href="/Index">Home</a></li>
<li class="nav-item"><a class="nav-link text-dark" href="/Restaurants/List">Restaurants</a></li>

Надеюсь, это поможет. Спасибо

person Rahul    schedule 01.01.2020
comment
Спасибо за ответ, но пока лучшее решение - просто использовать @ Url.Page (,) в качестве параметра, чтобы razor генерировал URL-адреса, чтобы не вводить весь URL-адрес - person Jackal; 02.01.2020