2016-04-26 3 views
0

私はSitecore MVC Webサイトで作業していますが、コントローラーでGlass.Mapper.Sc.Fields.ImageクラスのSrcプロパティをプログラムで実装しようとしています。しかし、それがうるさく唯一の公共ゲッターとセッター内部で宣言されました:Glass.Mapper.Sc.Fields.Imageクラスのインスタンスをプログラムで作成する方法

public string Src { get; internal set; } 

注意もこのクラスで唯一のパラメータなしのコンストラクタがあること。したがって、この値を内部的に設定する別の方法があるに違いありませんが、網羅的な検索をオンラインで行った後は、何かを見つけることができませんでした。

コントローラでは、SitecoreアイテムIDを含め、Imageオブジェクトを完全に埋め込むために必要なすべての値があります。 Imageオブジェクトのデータが含まれているSitecore.Data.Fields.ImageFieldの親Sitecoreアイテムにもアクセスできます。

私は以下を試しましたが、空のImageインスタンスを返します。

SitecoreService sitecoreService = new SitecoreService(database); 
Image image = sitecoreService.GetItem<Image>(imageField.InnerField.ID.Guid); 

そして、私はこれをしようとしたとき、それはいくつかの理由で、その大きさと正しく設定AltフィールドではなくSrcプロパティを持つ新しいImageオブジェクトを作成します。

Image img = sitecoreService.GetItem<Image>(imageField.MediaItem.ID.Guid); 
var parent = imageField.MediaItem.Parent; 

私がプログラムによってこのImageクラスのSrcプロパティを設定することができ、またはサイトコアフィールドはImageインスタンスに変換する方法を教えてください。


UPDATE >>>

私はDrazenJanjicekのアドバイス、@の後、正常に私のためImage性質のすべてを埋めsitecoreService.GetItem方法を使用して、親アイテムをマッピングするために管理。

+0

コールsitecoreService.GetItem の主な問題は、Imageがフィールド定義を含むクラスモデルではないことです。フィールド定義ですが、項目定義はありません。イメージアイテムテンプレートフィールドを持つ独自のクラスイメージを作成し、別のアイテムと同じように扱うことができます。 – Anton

答えて

1

あなたのSitecoreアイテムから適切なGlassタイプを作成する方が理にかなっていると思います。イメージプロパティを使用するだけです。イメージタイプのみを作成するための単純なAPIはありません。あなたはそれを行うことができますが、最終的にガラスは外側のタイプを最初に作成します。

+1

当初、私はあなたの答えがあまり役に立たなかったと思っていました。実際に私があなたの提案に従う方法を実際に助けてくれなかったからです。しかし、私はかなり手際よく、同様のコードを使って親オブジェクトを作成する方法を見つけたので、あなたは正しいのです...私のために 'Image'オブジェクトを作成しました。ありがとう。 – Sheridan

0

このコードは、私の作品:

var image = new Image() {MediaId = mediaItem.ID.ToGuid()}; 

あなたはイメージのためMEDIAIDを設定する必要があります。

+0

あなたの応答に感謝しますが、私はそれを試しました、そして、私が得るのは 'MediaId'プロパティだけを持つ' Image'インスタンスです。他のプロパティをどのように埋め込むことができますか?私たちはインスタンスに 'Guid'を渡すだけなので、それらへの参照はありません。 Sitecoreの経験がないことに気をつけて、さらに説明してください。例えば、私は 'GetItem'メソッドにどの項目を渡すべきですか?私は 'ImageField.MediaItem'アイテムを使っています。 – Sheridan

+0

@Sheridan、申し訳ありませんが、最初の行は奇妙です、私はそれを削除します。 投稿したコードは、Image to Glassモデルの保存に使用されます。 次に、私は次のようにします:someitem.Image = image; MasterService。保存する(someItem); ガラスのサービスでsomeItemをゲットするときに、イメージフィールドが正しく入力されます。 – Anton