Перенаправление Sitecore MVC на другую страницу

У меня было требование в моем Sitecore MVC отображать элементы карусели на главной странице, и когда вы нажимаете «Просмотреть больше», он перенаправляет пользователя на другую страницу для просмотра всего содержимого.

Как я мог этого добиться? В настоящее время все мои элементы в Sitecore имеют рендеринг контроллера в деталях презентации. Я просто не уверен, как получить GUID элемента карусели, используя его в действии контроллера, который будет перенаправлять на страницу?


person Arliz    schedule 05.08.2017    source источник


Ответы (2)


Я предполагаю, что у вас есть элементы карусели в одной папке в вашем дереве контента в Sitecore с некоторыми конкретными полями для каждого элемента карусели, такими как изображение, заголовок и т. д., поэтому у вас должно быть поле в элементах карусели со ссылкой для:

Название: Ссылка
Тип: GeneralLink

свяжите каждый элемент карусели с соответствующей страницей, а затем, по вашему мнению, вы можете прочитать URL-адрес страницы:

и вы можете использовать этот метод, чтобы получить 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();

Этот код взят из этого ответа.

person Ayman Barhoum    schedule 06.08.2017

Я думаю, вам нужно подготовить соответствующий объект модели в действии контроллера, а затем передать его в представление.

Класс модели:

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);
}

Вид бритвы:

@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>

В приведенном выше примере предполагается, что шаблон «Элемент карусели» содержит поле ссылки «Цель».

person Aleksey Shevchenko    schedule 07.08.2017