asp.net – Glass Mapper打破了图像字段的标准值

前端之家收集整理的这篇文章主要介绍了asp.net – Glass Mapper打破了图像字段的标准值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑模板:

公司

>徽标(图像字段)
>公司名称(文本字段)

公司模板在两个字段上都设置了标准值.如果我们获取公司项目并使用Glass保存而不进行任何更改,则logo字段不再使用标准值. (公司名称字段未触及.)

看起来,问题是Glass.Mapper.Sc.DataMappers.SitecoreFieldImageMapper以不同于Sitecore的方式序列化该字段的值.当它试图保存时,它认为这是对字段的更改,不再使用标准值.

标准值:

<image mediaid="{GUID}" />

玻璃生成的价值:

<image height="64" width="64" mediaid="{GUID}" alt="Alt text" />

有没有办法让Glass生成与Sitecore相同的输出

解决方法

我认为问题在于 SitecoreFieldImageMapper如何将ImageField映射到Image.为了获得高度,宽度和Alt使用公共属性.如果我们通过反射器查看它们,我们将看到它的值不直接来自字段:
public string Alt
{
    get
    {
        string text = base.GetAttribute("alt");
        if (text.Length == 0)
        {
            Item item = this.MediaItem;
            if (item != null)
            {
                MediaItem mediaItem = item;
                text = mediaItem.Alt;
                if (text.Length == 0)
                {
                    text = item["Alt"];
                }
            }
        }
        return text;
    }
    set
    {
        base.SetAttribute("alt",value);
    }
}

如果字段不包含值(例如,对于“alt”:if(text.Length == 0)),则将从链接的MediaItem接收值.它导致在保存字段后从媒体库项添加高度,宽度和Alt.

解决此问题,您可以尝试替换此代码

int height = 0;
int.TryParse(field.Height,out height);
int width = 0;
int.TryParse(field.Width,out width);

img.Alt = field.Alt;
img.Height = height;
img.Width = width;

直接获取属性而不是使用属性

int height = 0;
if(int.TryParse(field.GetAttribute("height"),out height))
{
    img.Height = height;
}


int width = 0;
if(int.TryParse(field.GetAttribute("width"),out width))
{
    img.Width = width;
}

img.Alt = field.GetAttribute("alt");

使用Alt属性一切都应该没问题.但是宽度和高度可能存在问题,因为它们不是Nullable,我不确定GlassMapper如何处理没有设置的宽度和高度的图像.

原文链接:https://www.f2er.com/aspnet/247244.html

猜你在找的asp.Net相关文章