考虑模板:
公司
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相同的输出?
答案 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 和尚未设置的高度。