Передача HTML в вспомогательную функцию пользовательского тега

У меня есть помощник тега MVC, который отображает ссылку и некоторый HTML. HTML может быть, например, значком или другим блоком HTML. У меня возникли проблемы с преобразованием его в Core. В MVC я использовал (упрощенно):

    @RenderTile(Url.Action("SomeAction", "Account"), @<span><i class="fa fa-user"></i> Users</span>)

Затем помощник отображает HTML, переданный в качестве параметра. Кажется, класс HelperResult отсутствует в Core. Есть ли альтернатива?

@helper RenderTile(string url, Func<dynamic, HelperResult> text)
{
    <div class="col-xs-6 col-md-3">
        <a class="tile-link" href="@url" @(newWindow?"target=blank":string.Empty)>
            <div class="text-info tile" style="background: @backgroundColor">

                <div class="row margin-top-20">
                    <div class="col-xs-12 text-center">
                        <div class="tile-text">
                            @text(null)
                        </div>
                    </div>
                </div>
            </div>
        </a>
    </div>
}

person Echilon    schedule 01.07.2020    source источник


Ответы (1)


Чтобы выполнить ваше требование, вы можете обратиться к следующему фрагменту кода, чтобы создать вспомогательную функцию тега.

public class RenderTile: TagHelper
{
    public string Url { get; set; }
    public bool NewWindow { get; set; }
    public string BackgroundColor { get; set; }
    public string text { get; set; }

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

        output.Attributes.SetAttribute("class", "tile-link");

        if (NewWindow)
        {
            output.Attributes.SetAttribute("target", "_blank");
        }

        output.Attributes.SetAttribute("href", Url);

        output.Content.AppendHtml($@"<div class=""text-info tile"" style=""background: {BackgroundColor}""><div class=""row margin-top-20""><div class=""col-xs-12 text-center""> <div class=""tile-text"">{text}</div></div></div></div>");           
    }
}

Страница просмотра

<div class="col-xs-6 col-md-3">
    <render-tile Url="@Url.Action("Privacy", "Home")" new-window="true" background-color="red" 
                 text="<span><i class='fa fa-user'></i>Users</span>">
    </render-tile>
</div>

Результат испытаний

введите здесь описание изображения

person Fei Han    schedule 02.07.2020