2016-03-22 6 views
0

データソースがSitecore Media Libraryのフォルダであるチェックリストがあります。このフィールドの 'checked'項目は、このフォルダの画像を表しているので、このチェックリストをパイプで区切られた画像IDの文字列にコンパイルすることを期待しています。これらのIDを使用して、メディアライブラリのイメージをビューにレンダリングすることはできますか?Sitecore 7 MVCとRazorを使用したIDによる画像のレンダリング

これは私のViewModelの例である:

public class PageViewModel { 
    public List<string> ImageIDs { get; set; } 
} 

そして、これが私のカミソリの構文のコードの例です:

@foreach (var imageId in PageViewModel.ImageIDs) { 
    <div class="image-container"> 
     <img src="@Url.Content(MediaManager.GetMediaUrl(imageId.MediaItem))"> 
    </div> 
} 

答えて

0

私はMediaManagerが何をするかわからないんだけど、あなたのimageIdがあります文字列に拡張メソッドを持たないかぎり、MediaItemプロパティにアクセスしています。

あなたのアプローチが正しいようだが、APIを知らない、私は推測を取り、それがあるべきだと思います:

<img src="@Url.Content(MediaManager.GetMediaUrl(imageId))"> 

UPDATE

は周り少し掘りを行なったし、それはあなたができると思われます文字列を取り込んでメディアを取得する拡張メソッドを記述します。

は見てみましょう: Get media url in View in Sitecore MVC

+0

'GetMediaUrl()'はパラメータとして 'MediaItem'オブジェクトしか受け入れないので、これはうまくいかない - 私が取っていたアプローチは直感的だが大雑把に間違っていると思う。 – alex

2

サイトコアのチェックリストは、カバーの下Multilistです。だからあなたはそのように扱うことができます。

public class PageViewModel { 
    public List<string> ImageUrls { get; set; } 
} 

は、URL文字列

MultilistField related = Sitecore.Context.Item.Fields["Related Images"]; 

List<string> imageUrls; 

foreach(var item in related.GetItems()) 
{ 
    string hashedUrl = HashingUtils.ProtectAssetUrl(Sitecore.StringUtil.EnsurePrefix('/', Sitecore.Resources.Media.MediaManager.GetMediaUrl(item)); 

    imageUrls.Add(hashedUrl); 
} 

var pageViewModel = new PageViewModel {ImageUrls = imageUrls}; 

画像は編集できません

@foreach (var imageUrl in PageViewModel.ImageIDs) { 
    <div class="image-container"> 
     <img src="@imageUrl"> 
    </div> 
} 

最後に、あなたのビューにフィールドを解析します。それらは表示することしかできません。

+0

これに2つの問題があります。まず、画像のURLのみが必要です。アイテム全体をビューに渡す必要はないので、コントローラにUrlを取得してください。それは、手書き文字をきれいにするでしょう。次に、サイズ変更属性などを追加したい場合に、 'HashingUtils.ProtectAssetUrl(url)'メソッドを使ってイメージUrlを実行する必要があります。 –

+0

同意して完了しました。 –

-1
@model RotatorViewModel 

<h1>Products List</h1> 
@foreach (var item in Model.RotatorItems) 
{ 
    <h2>@Html.Sitecore().Field("Title", item)</h2> 
     @Html.Sitecore().Field("Image", item) 
     @Html.Sitecore().Field("Description", item) 
} 
+3

このコードがOPの問題を解決していると感じる理由は説明する価値があります。 – Bugs

関連する問題