【发布时间】:2021-01-08 05:52:24
【问题描述】:
我创建了一个 taghelper,它使用多个来源呈现图形
public class CustomFigureTagHelper : TagHelper
{
public HelpersCore.Entity.PictureData PictureData { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (PictureData != null)
{
output.TagName = "figure"; // Replaces <email> with <a> tag
StringBuilder sb = new StringBuilder();
sb.Append("<picture>");
if (!string.IsNullOrEmpty(PictureData.Image2))
WriteSource("image/webp", PictureData.Image2, sb);
WriteSource("image/jpg", PictureData.Image1, sb);
sb.Append("<img alt=\"" + PictureData.AlternateText + "\" class=\"lazyload\" data-cms-image=\"" + PictureData.Image1 + "\" src=\"" + PictureData.Thumbnail + "\" style=\"width:100%;\">");
sb.Append("</picture>");
if (PictureData.ShowCaption && !string.IsNullOrEmpty(PictureData.AlternateText))
{
sb.Append("<figcaption>");
sb.Append(PictureData.AlternateText);
sb.Append("</figcaption>");
}
output.Content.SetHtmlContent(sb.ToString());
return;
}
output.Content.SetContent(string.Empty);
}
private void WriteSource(string imageformat, string image, StringBuilder sb)
{
sb.Append("<source type=\"" + imageformat + "\" srcset=\"" + image + "\" data-srcset=\"" + image + "\">");
}
}
taghelper 在未编译的视图中使用
@{
if (!string.IsNullOrEmpty(Model.Settings))
{
Newtonsoft.Json.Linq.JObject settings = Newtonsoft.Json.Linq.JObject.Parse(Model.Settings);
if (settings["ImagePath"] != null)
{
Comito.Core.HelpersCore.Entity.PictureData pictureData = new Comito.Core.HelpersCore.Entity.PictureData();
pictureData.Image1 = settings["ImagePath"] != null ? "/CMSContent/Media/Images/lg/" + settings["ImagePath"].ToString() : string.Empty;
pictureData.Image2 = settings["ImagePathWebP"] != null ? "/CMSContent/Media/Images/lg/" + settings["ImagePathWebP"].ToString() : string.Empty;
pictureData.Thumbnail = settings["ImagePath"] != null ? "/CMSContent/Media/Images/xs/" + settings["ImagePath"].ToString() : string.Empty;
<custom-figure picture-data="pictureData"></custom-figure>
}
}
}
在 localhost (IIS) 上,taghelper 呈现良好
<figure data-theme="mytheme">
<picture>
<source type="image/webp" srcset="/CMSContent/Media/Images/lg/42.webp" data-srcset="/CMSContent/Media/Images/lg/42.webp">
<source type="image/jpg" srcset="/CMSContent/Media/Images/lg/42.jpg" data-srcset="/CMSContent/Media/Images/lg/42.jpg">
<img alt="" class="lazyload" data-cms-image="/CMSContent/Media/Images/lg/42.jpg" src="/CMSContent/Media/Images/xs/42.jpg" style="width:100%;">
</picture>
但在我的服务器(也是 IIS)上,我只是生成 taghelper 的原始输出:
<custom-figure picture-data="pictureData"></custom-figure>
【问题讨论】:
标签: c# asp.net-core-mvc tag-helpers