Glass Mapper打破了图像区域的标准值

时间:2016-06-15 17:20:29

标签: asp.net sitecore sitecore8 glass-mapper

考虑模板:

公司

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

Company模板在两个字段上都设置了标准值。如果我们获得Company项并使用Glass保存而不进行任何更改,则Logo字段不再使用标准值。 (Company Name字段未受影响。)

问题似乎是Glass.Mapper.Sc.DataMappers.SitecoreFieldImageMapper序列化该字段的值与Sitecore不同。当它试图保存时,它认为这是对字段的更改,不再使用标准值。

标准值:

<image mediaid="{GUID}" />

玻璃生成的价值:

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

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

1 个答案:

答案 0 :(得分:0)

我认为问题在于SitecoreFieldImageMapper将ImageField映射到Image的方式。要获取高度宽度 Alt 是公共属性。如果我们通过反射器查看它们,我们将看到它的值不是直接来自字段:

<figure>

如果字段不包含值(例如,对于&#34; alt&#34;:if(text.Length == 0)),则将从链接的MediaItem接收值。保存字段后,它会导致从媒体库项目中添加高度宽度 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);
    }
}

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

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;

使用 Alt 属性,一切都应该没问题。但是 Width Height 可能存在问题,因为它们不是Nullable,我不确定GlassMapper如何使用 Width 尚未设置的高度。