我们最近将我们的开发网站从Sitecore CMS 6.6更新为Sitecore CMS 7.2。这样做后,我们失去了在包含图像的网站上加载任何页面的能力(几乎全部!),返回堆栈跟踪错误:
[MissingMethodException: Method not found: 'System.String Sitecore.Data.Fields.ImageField.get_Src()'.]
[TargetInvocationException: Property accessor 'ImgURL' on object 'Siteworx.Domain.Modules.HomeCarousel' threw the following exception:'Method not found: 'System.String Sitecore.Data.Fields.ImageField.get_Src()'.']
目前,我们应该生成图像URL的代码(并且在更新之前一直工作)如下所示:
public string ImgURL
{
get { return new SCTypes.Image(this, "image").URL; }
}
我在弄清楚这里出了什么问题时遇到了问题,到目前为止,我没有找到关于这个问题的任何体面的参考。如果有人能把我拉向正确的方向,我会永远感激。
更新 - 2014年8月20日
好,
所以我将上面的代码更新为:
public string ImgURL
{
//get { return new SCTypes.Image(this, "image").URL; }
get
{
string src = string.Empty;
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item HomeCarousel = master.GetItem("/sitecore/content/modules/home/carousel items");
Sitecore.Data.Fields.ImageField imageField = HomeCarousel.Fields["imagefield"];
if (imageField != null && imageField.MediaItem != null)
{
Sitecore.Data.Items.MediaItem image = new Sitecore.Data.Items.MediaItem(imageField.MediaItem);
src = Sitecore.StringUtil.EnsurePrefix('/', Sitecore.Resources.Media.MediaManager.GetMediaUrl(image));
// src = Sitecore.Resources.Media.MediaManager.GetMediaUrl(image);
}
return src;
}
页面现在加载,但没有图像。在查看图像所在的html时,我看到:
<img src = "">
这意味着图像的URL未在IF语句中设置。当我尝试在没有IF语句的情况下构建代码并加载页面时,StackTrace会回退一个空引用错误。
答案 0 :(得分:0)
庵。如果在没有IF语句的情况下构建它,并且最终会出现空引用错误,则只表示imageField和/或imageField.MediaItem确实为null。 IF语句只是允许它测试null并返回空字符串,它正在成功完成!
结果,这表明问题又回来了。我不是Sitecore dev&amp; amp;不知道API,所以我依赖于这里的几分钟研究......但我从Sitecore Content API Cookbook中看到了一件事:
您的“master.GetItem(”/ sitecore / content / modules / home / carousel items“);”可能需要是“master.GetItem(”/ sitecore / content / modules / home / carousel“);”其余部分要抓住必要的细节。请参见第3.4节“如何访问媒体项”。
祝你好运!答案 1 :(得分:0)
好的,事实证明我有正确的代码,只是在错误的地方。这两行:
Sitecore.Data.Items.MediaItem image = new Sitecore.Data.Items.MediaItem(imageField.MediaItem);
src = Sitecore.StringUtil.EnsurePrefix('/', Sitecore.Resources.Media.MediaManager.GetMediaUrl(image));
在单独的“帮助程序”代码文件中需要代码return this._imageField.Src;
所在的代码文件,它可以在整个站点范围内恢复所有图像。已被弃用的是.Src
,当被这两行替换时,还原了被认为有问题的原始代码get { return new SCTypes.Image(this, "image").URL; }
,问题就解决了。