Sitecore MVC重定向到另一个页面

时间:2017-08-05 07:09:40

标签: sitecore-mvc

我的Sitecore MVC要求在主页中显示轮播项目,当点击查看更多时,它将重定向到另一个页面供用户查看完整内容

我怎么能实现这个目标?目前Sitecore中的所有项目都在演示文稿详细信息中具有控制器渲染。我只是不确定如何使用控制器操作获取Carousel项目的GUID,它将在页面上重定向?

2 个答案:

答案 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'链接字段。