Атрибут asp -append-version не распознается, когда пользовательский лог c добавлен в тег «img» - PullRequest
1 голос
/ 09 июля 2020
Атрибут

asp-append-version работает должным образом, если тег img имеет стандартную структуру. То есть:

Этот TagHelper:

<img asp-append-version="true" src="~/images/about.jpg" />

дает ожидаемый html вывод:

<img src="/images/about.jpg?v=4xCtMpE5CMcTYU8_S2HRr_MJIIbbF1CaFbx1p1doO4g" />

Но когда я добавляю некоторые пользовательские C# -logi c в img тег asp-append-version перестает работать. Т.е.:

<img asp-append-version="true" @(string.IsNullOrEmpty(Model.ImageId) ? "" : $"id={Model.ImageId}") src="@Model.Path" />

превращается в html:

<img asp-append-version="true" id=imgAvatarEdit src="/images/upload/userAvatars/vdnf131s.jpg" />

Что не так с фрагментами кода, вложенными в ImageTagHelper?

1 Ответ

1 голос
/ 10 июля 2020

когда я добавляю пользовательский C# -logi c в тег img asp -append-version перестает работать

Кажется, он распознается как html <img> элемент при использовании условного оператора ?: в области объявления атрибутов элемента, что вызывает проблему.

Для достижения того же требования вы можете использовать @if для управления запуском кода, как показано ниже.

@if (string.IsNullOrEmpty(Model.ImageId))
{
    <img asp-append-version="true" src="@Model.Path" />
}
else
{
    <img asp-append-version="true" id="@Model.ImageId" src="@Model.Path" />
}

Кроме того, вы можете попробовать реализовать настраиваемый ImageTagHelper , чтобы принимать ImageId связанную информацию, а затем динамически генерировать атрибут id для элемента <img>.

private const string IdAttributeName = "asp-id";

//...

public override void Process(TagHelperContext context, TagHelperOutput output)
{
    if (context == null)
    {
        throw new ArgumentNullException(nameof(context));
    }

    if (output == null)
    {
        throw new ArgumentNullException(nameof(output));
    }

    output.CopyHtmlAttribute(SrcAttributeName, context);
    ProcessUrlAttribute(SrcAttributeName, output);

    if (AppendVersion)
    {
        EnsureFileVersionProvider();

        //...

        if (!string.IsNullOrEmpty(Id))
        {
            output.Attributes.SetAttribute("id", Id);
        }

        output.Attributes.SetAttribute(SrcAttributeName, FileVersionProvider.AddFileVersionToPath(ViewContext.HttpContext.Request.PathBase, Src));
    }
}

Используя пользовательский ImageTagHelper и установите asp-id

<img asp-append-version="true" asp-id="@Model.ImageId" src="@Model.Path" />

Результат теста

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

...