Sitecore媒体项url

Sitecore媒体项url,sitecore,sitecore7.2,Sitecore,Sitecore7.2,我在Sitecore7.2 我在尝试检索媒体URL时遇到问题 我有一个模板(PageBanner),只有一个名为BannerImage的字段。字段类型为Image 另一个名为Homepage的模板继承了此模板PageBanner 内容项主页使用模板主页。我可以看到BannerImage字段作为Home内容项的一部分。图像也已分配给此字段 现在,是遇到问题的后端位 homeItem.Field[“BannerImage”]返回图像项 homeItem[“BannerImage”]返回空字符串 如

我在Sitecore7.2

我在尝试检索媒体URL时遇到问题

我有一个模板(
PageBanner
),只有一个名为
BannerImage
的字段。字段类型为
Image

另一个名为
Homepage
的模板继承了此模板
PageBanner

内容项
主页
使用模板
主页
。我可以看到
BannerImage
字段作为
Home
内容项的一部分。图像也已分配给此字段

现在,是遇到问题的后端位

homeItem.Field[“BannerImage”]
返回图像项

homeItem[“BannerImage”]
返回空字符串

如果我尝试将其强制转换为ImageField-
(ImageField)homeItem.Field[“BannerImage”]
,则生成的ImageField项没有
MediaItem
或任何其他字段集

我可以做到:

var imageFieldItem = Sitecore.Context.Database.GetItem(homeItem.Fields["BannerImage"].ID);
var mediaUrl = MediaManager.GetMediaUrl(imageFieldItem);
但这给了我一个动态媒体url,格式为-
~/media/a2c15f35836746f398e772c81d040607.ashx

我希望通过路径获取媒体URL


知道我在这里遗漏了什么吗?

您正在使用
MediaManager
进行正确的调用以获取URL,但是您需要将内部MediaItem传递给
GetMediaUrl()
方法:

string imageURL = string.Empty;
Sitecore.Data.Fields.ImageField imageField = homeItem.Field["BannerImage"];
if (imageField != null && imageField.MediaItem != null)
{
    Sitecore.Data.Items.MediaItem image = new Sitecore.Data.Items.MediaItem(imageField.MediaItem);
    imageURL = Sitecore.StringUtil.EnsurePrefix('/', Sitecore.Resources.Media.MediaManager.GetMediaUrl(image));
}

对于正在生成的动态URL,如果它处于编辑模式,则这是正常的,请在正常模式下检查媒体URL是否完全呈现。

在某些实用程序类中尝试此代码

var imageUrl=GetImageUrl(homeItem,“BannerImage”false)


嗨@jammykam。就像问题中提到的。当我将
homeItem.field[“BannerImage”]
强制转换为ImageField时,MediaItem字段为空。没有
字段的
homeItem[“BannerImage”]
的值是多少?它返回图像项目。我将在问题中添加一些调试信息@MarekMusielak@NomadTravaler它将永远不会返回图像项。它只能返回字符串。字符串的值是多少?这是xml吗?这是项guid为的字符串吗?还有别的吗?你写的是
.Fields
My bad@MarekMusielak。不要把你的评论看错了。它返回了一个空字符串。这意味着有一个字段,但它没有值。转到Sitecore桌面(
/Sitecore/shell
url)并找到主项目。看看这个字段的值是多少。
    public static string GetImageUrl(Item item, string fieldname, bool includeServerUrl)
    {
        // do the checks
        if (item == null) { return ""; }
        if (fieldname.Length == 0) { return ""; }

        // create media options
        Sitecore.Resources.Media.MediaUrlOptions mediaUrlOptions = new Sitecore.Resources.Media.MediaUrlOptions { AlwaysIncludeServerUrl = true };
        mediaUrlOptions.AbsolutePath = true;

        // do we want to include the FQDN?
        if (includeServerUrl)
            mediaUrlOptions.AlwaysIncludeServerUrl = true;

        // convert to image field
        Sitecore.Data.Fields.ImageField imagefield = item.Fields[fieldname];

        if (imagefield == null) { return ""; }

        // get the item so we can process it
        Item mediaitem = Sitecore.Context.Database.GetItem(imagefield.MediaID);
        if (mediaitem == null) { return ""; }

        // pass in the item with the options to get the URL
        string mediaurl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(mediaitem, mediaUrlOptions);
        if (mediaurl == null) { return ""; }

        return mediaurl;
    }