您可以在每个Umbraco网站预先安装的样本宏部分视图中查看和学习。有一个片段叫做列出来自媒体文件夹的图片。
默认片段的代码如下所示:
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@*
Macro to display a series of images from a media folder.
How it works:
- Confirm the macro parameter has been passed in with a value
- Loop through all the media Id's passed in (might be a single item, might be many)
- Display any individual images, as well as any folders of images
Macro Parameters To Create, for this macro to work:
Alias:mediaId Name:Select folder with images Type:Single Media Picker
*@
@{ var mediaId = Model.MacroParameters["mediaId"]; }
@if (mediaId != null)
{
@* Get all the media item associated with the id passed in *@
var media = Umbraco.Media(mediaId);
var selection = media.Children("Image");
if (selection.Any())
{
<ul>
@foreach (var item in selection)
{
<li>
<img src="@item.umbracoFile" alt="@item.Name" />
</li>
}
</ul>
}
}
我们需要记住,如果我们使用他们那里参数添加到宏。 然后,我们可以使用两种方法:媒体或TypedMedia辅助方法检索文件夹(这是不同类型的典型媒体项目),尽管所需的返回类型。我通常使用TypedMedia能够在Visual Studio中对强类型对象和预览属性进行操作。
如果我们正确地创建宏并将其插入使用这样的代码模板(用正确的文件夹ID):
@Umbraco.RenderMacro("Test", new { mediaId="1082" })
我们应该在那一刻看到该文件夹(所有这些图像的列表)。
最后一部分与您以前做过的几乎相同,但我们需要稍微调整一下。我的最终代码和建议低于:
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@{
var folderId = Model.MacroParameters["mediaId"];
if (folderId != null)
{
var media = Umbraco.TypedMedia(folderId);
var rand = new Random();
var imagesInFolder = media.Children("Image");
if(imagesInFolder.Any()) {
var pick = imagesInFolder.ElementAt(rand.Next(0, imagesInFolder.Count()));
if (pick != null)
{
<img src="@pick.GetCropUrl()" alt="@pick.Name" />
}
}
}
}
让我知道,如果它
您正在使用什么版本的一把umbraco的解决你的问题:)? – BeaverProj
我使用的是版本7 – KingOfKong
它看起来像使用v4中的旧DynamicNode Razor api。 – BeaverProj