使用Sitecore 7 MVC和Razor

时间:2016-03-22 16:32:44

标签: asp.net-mvc razor sitecore sitecore-mvc

我有一份清单,其数据源是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>
}

3 个答案:

答案 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))">

更新

进行了一些挖掘,似乎你可以编写一个扩展方法,它将接收一个字符串并为你提供媒体。

看看: Get media url in View in Sitecore MVC

答案 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)
}