我的Sitecore MVC要求在主页中显示轮播项目,当点击查看更多时,它将重定向到另一个页面供用户查看完整内容
我怎么能实现这个目标?目前Sitecore中的所有项目都在演示文稿详细信息中具有控制器渲染。我只是不确定如何使用控制器操作获取Carousel项目的GUID,它将在页面上重定向?
答案 0 :(得分:0)
我假设您在Sitecore的内容树中的一个文件夹下有旋转木马项目,每个旋转木马项目都有一些特定字段,如图片,标题等等,因此您应该在轮播项目中包含用于链接的字段:< / p>
名称:链接
类型:GeneralLink
将每个轮播项目链接到正确的页面,然后在您的视图中,您可以阅读页面网址:
并且您可以使用此方法从您的轮播组件获取指向该页面的链接URL:
public String LinkUrl(Sitecore.Data.Fields.LinkField lf)
{
switch (lf.LinkType.ToLower())
{
case "internal":
// Use LinkMananger for internal links, if link is not empty
return lf.TargetItem != null ? Sitecore.Links.LinkManager.GetItemUrl(lf.TargetItem) : string.Empty;
case "media":
// Use MediaManager for media links, if link is not empty
return lf.TargetItem != null ? Sitecore.Resources.Media.MediaManager.GetMediaUrl(lf.TargetItem) : string.Empty;
case "external":
// Just return external links
return lf.Url;
case "anchor":
// Prefix anchor link with # if link if not empty
return !string.IsNullOrEmpty(lf.Anchor) ? "#" + lf.Anchor : string.Empty;
case "mailto":
// Just return mailto link
return lf.Url;
case "javascript":
// Just return javascript
return lf.Url;
default:
// Just please the compiler, this
// condition will never be met
return lf.Url;
}
}
并在您的轮播视图中:
Sitecore.Data.Fields.LinkField linkField = carouselItem.Fields["Link"];
var pageUrl = linkField.LinkUrl();
此代码取自此answer
答案 1 :(得分:0)
我认为您需要在控制器操作中准备适当的模型对象,然后将其传递给视图。
模特课:
public class CarouselModel
{
public List<Item> CarouselItems { get; set; }
}
控制器操作:
public ActionResult Carousel()
{
var model = new CarouselModel
{
CarouselItems = /* get appropriate items dependent on your logic */
};
return View("~/Views/renderings/Carousel.cshtml", model);
}
Razor观点:
@model CarouselModel
<div>
@foreach(var carouselItem in Model.CarouselItems)
{
Sitecore.Data.Fields.LinkField targetLinkField = carouselItem.Fields["Target"];
<a href="@Sitecore.Links.LinkManager.GetItemUrl(targetLinkField.TargetItem)">Some link</a>
}
</div>
上面的例子假设'Carousel Item'的模板包含'Target'链接字段。