未找到Sitecore 7.2方法:' System.String Sitecore.Data.Fields.ImageField.get_Src()

时间:2014-08-19 18:46:38

标签: asp.net sitecore .net-4.5 sitecore7.2

我们最近将我们的开发网站从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会回退一个空引用错误。

2 个答案:

答案 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; },问题就解决了。