4

I need to read image parameters (source, width, height) in controller when I'm building json feed.

I made all the steps from this question. But suggested method allows you to get image tag using View Helper, and only inside view context. Since I can't (and really don't want to, as it's really bad practice) create HTMLHelper in Controller I can't generate it there.

This method gives me only path to *.ashx, no matter what I set in my web.config file. So I have this *.ashx URL (/~/media/5EE32493443547ED8DB0B26166209C85.ashx) but I can't take advantage on it and generate normal *.jpg URL, which is /~/media/001FC62786B044F5888640C7164ED72F.JPG.

*.ashx URL has ID in it (5EE32493-4435-47ED-8DB0-B26166209C85), but *.jpg doesn't...

Also when I paste *.ashx URL into browser, server responds with exception that resource couldn't be found.

4

1 に答える 1

5

しばらく検索して試し、多数のオプションをテストした後、非常に簡単な解決策を見つけました。

string mediaUrl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(item);

itemSitecore.Data.Items.MediaItemクラスのオブジェクトにする必要があります。

mediaUrl変数には次の値があります。/~/media/001FC62786B044F5888640C7164ED72F.JPG

この単純な方法に基づいて、Width と Height に関する質問に戻り、Sitecore CMS を介して追加された画像からすべてのプロパティを取得する方法を示す単純なクラス (画像を JSON に簡単にシリアル化できるようにするため) を作成しました。

public class DataItemImage
{
    public string ID { get; set; }
    public string Source { get; set; }
    public string Width { get; set; }
    public string Height { get; set; }
    public string Alt { get; set; }

    public DemoDataItemImage(Sitecore.Data.Fields.ImageField obj)
    {
        string mediaUrl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(obj.MediaItem);
        ID = obj.MediaItem.ID.ToString();
        Source = mediaUrl;
        Width = obj.Width;
        Height = obj.Height;
        Alt = obj.Alt;
    }
}

パラメータも追加Altしました。ID他にもClassやのようなBorderものがありますが、これらはフロントエンド(HTML+CSS)で設定できるので付けませんでした。

このクラスを Json として出力する場合は、コントローラー アクションを return に設定し、次のJsonResult行を追加します (ここで、 はクラスobjのインスタンスです)。DataItemImage

return Json(obj, JsonRequestBehavior.AllowGet);

他の Sitecore 開発者にも役立つことを願っています。

于 2013-02-19T03:43:40.240 に答える