2016-03-22 5 views
0

Ich habe eine Checkliste, deren Datenquelle ein Ordner in der Sitecore Media Library ist. Jedes der 'geprüften' Elemente in diesem Feld stellt ein Bild in diesem Ordner dar, daher erwarte ich, dass diese Checkliste in eine Folge von durch Pipe getrennten IDs übersetzt wird. Ist es möglich, diese IDs zum Rendern der Medienbibliotheksbilder in einer Ansicht zu verwenden?Rendern von Bildern nach ID mit Sitecore 7 MVC und Razor

Dies ist ein Beispiel für meine Viewmodel:

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

Und dies ist ein Beispiel für meine Razor-Syntax Code:

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

Antwort

0

Ich bin nicht sicher, was MediaManager tut, aber Ihr imageId ist eine Zeichenfolge und Sie greifen auf eine MediaItem-Eigenschaft zu, die falsch wäre, es sei denn, Sie haben eine Erweiterungsmethode für eine Zeichenfolge.

Ihr Ansatz scheint richtig, aber nicht die API zu wissen, würde ich eine Vermutung nehmen und sagen, dass es sein sollte:

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

UPDATE

habe ein wenig um zu graben und es scheint, dass Sie Schreibe eine Erweiterungsmethode, die einen String aufnimmt und dir das Medium bringt.

Werfen Sie einen Blick: Get media url in View in Sitecore MVC

+0

Dies wird nicht funktionieren, da 'GetMediaUrl()' nur ein 'MediaItem'-Objekt als Parameter akzeptiert - ich denke, dass der Ansatz, den ich gewählt habe, intuitiv aber völlig falsch ist. – alex

2

Die Sitecore-Checkliste ein Multilist unter der Decke ist. So können Sie es als solches behandeln.

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

das Feld in URL-Strings Parsen

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}; 

Schließlich Ihre Ansicht

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

Die Bilder nicht bearbeitet werden. Sie können sie nur anzeigen.

+0

2 Probleme damit. Zuerst - nur die Bild-URL wird benötigt, wir müssen nicht das gesamte Objekt an die Ansicht übergeben, also hol die URL in den Controller. Dadurch wird das Razorscript sauberer. Zweitens sollten Sie das Image Url über die Methode 'HashingUtils.ProtectAssetUrl (url)' ausführen, falls Sie Größenänderungsattribute usw. hinzufügen möchten. –

+0

Einverstanden und fertig. –

-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

Es wäre es wert zu erklären, warum Sie glauben, dass dieser Code das Problem des OPs löst. – Bugs

Verwandte Themen