【问题标题】:Sitecore 7.2 Method not found: 'System.String Sitecore.Data.Fields.ImageField.get_Src()Sitecore 7.2 方法未找到:'System.String Sitecore.Data.Fields.ImageField.get_Src()
【发布时间】:2014-09-29 19:18:00
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    嗯。如果您在没有 IF 语句的情况下构建它并且最终出现空引用错误,则仅意味着 imageField 和/或 imageField.MediaItem 确实为空。该 IF 语句只是允许它测试 null 并返回空字符串,它正在成功地执行此操作!

    因此,这表明问题在后面。我不是 Sitecore 开发人员并且不知道 API,所以我在这里依赖几分钟的研究......但我从 Sitecore Content API Cookbook 中看到一件事:

    你的 "master.GetItem("/sitecore/content/modules/home/carousel items");"可能需要是 "master.GetItem("/sitecore/content/modules/home/carousel");"其余部分以获取必要的细节。请参阅第 3.4 节“如何访问媒体项目”。

    祝你好运!

    【讨论】:

      【解决方案2】:

      好的,事实证明我的代码是正确的,只是在错误的地方。两行:

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

      【讨论】:

        猜你喜欢
        • 2015-08-14
        • 1970-01-01
        • 2015-08-05
        • 2018-12-14
        • 2021-06-17
        • 2021-12-27
        • 2021-09-12
        • 2018-01-14
        • 2014-09-19
        相关资源
        最近更新 更多