Установите макет главной страницы (т. Е. Ту, с которой вы хотите перенаправить) в качестве универсального обработчика ashx. Это означало бы, что код пользовательского интерфейса никак не связан.
Вы можете сделать это с намного меньшим количеством кода, если выполняются следующие предположения:
1. Все дочерние элементы являются информационными бюллетенями
2. Самые последние находятся вверху (например, элементы отсортированы по дате выпуска)
namespace YourSite
{
public class NewsletterHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
Item item = Sitecore.Context.Item.Children[0];
string url = Sitecore.Links.LinkManager.GetItemUrl(item);
context.Response.Redirect(url);
}
public bool IsReusable { get { return false; } }
}
}
Если приведенные выше допущения неверны, то найти последние опубликованные данные может быть не так просто, как получить дату публикации, как описано в Zooking. Это может быть, но если вы исправите более старую рассылку и повторно опубликуете, этот код может дать сбой (я думаю?). Если все в порядке, нет проблем, Zooking верен, в противном случае вы можете указать каждому информационному бюллетеню конкретное поле даты ... в этом случае используйте код, указанный здесь в вашем обработчике.
namespace YourSite
{
public class NewsletterHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
Item[] children = Sitecore.Context.Item.Axes.GetDescendants();
Item item = children.AsQueryable()
.Where(c => c.TemplateName.ToLower()
.Contains("newsletter"))
.OrderByDescending(c => DateTime.Parse(c["PublishDate"])).FirstOrDefault();
string url = Sitecore.Links.LinkManager.GetItemUrl(item);
context.Response.Redirect(url);
}
public bool IsReusable { get { return false; } }
}
}