我有一份清单,其数据源是Sitecore媒体库中的文件夹。此字段中的每个“已检查”项目代表此文件夹中的图像,因此我希望此核对表能够编译为一系列管道分隔的图像ID。是否可以使用这些ID在视图上呈现媒体库图像?
这是我的ViewModel的一个例子:
public class PageViewModel {
public List<string> ImageIDs { get; set; }
}
这是我的Razor语法代码的一个例子:
@foreach (var imageId in PageViewModel.ImageIDs) {
<div class="image-container">
<img src="@Url.Content(MediaManager.GetMediaUrl(imageId.MediaItem))">
</div>
}
答案 0 :(得分:2)
Sitecore CheckList是一个多重名单。所以你可以这样对待它。
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>
}
图片无法修改。你只能显示它们。
答案 1 :(得分:0)
我不确定MediaManager
是做什么的,但您的imageId
是一个字符串而您正在访问MediaItem
属性,这是不正确的,除非您有一个扩展名字符串上的方法。
您的方法似乎是正确的,但不知道API,我会猜测并说它应该是:
<img src="@Url.Content(MediaManager.GetMediaUrl(imageId))">
更新
进行了一些挖掘,似乎你可以编写一个扩展方法,它将接收一个字符串并为你提供媒体。
答案 2 :(得分:-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)
}