2014-03-10 3 views
3

Я пытаюсь включить различные сценарии на разные страницы в Sitecore и, похоже, не может найти очень хороший способ сделать это. В обычном проекте mvc я мог бы добавить помощника @Section {} и использовать его на разных частичных представлениях, чтобы указать, где именно эти сценарии будут отображаться в макете, но я не смог найти эквивалент для того, как помощник Razor реализован с Sitecore. Я бы хотел сделать это без использования держателя места, я не хочу добавлять представление в Sitecore каждый раз, когда мне нужно добавить файл сценария.Эквивалент Помощнику секции Razor в Sitecore

Заранее спасибо.

ответ

1

То, как у меня есть настройка в моем текущем решении Sitecore MVC, есть мой макет с вызовом метода расширения для RenderScripts () внизу перед тегом закрывающего тела.

@Html.RenderScripts() 

Этот метод расширения выглядит следующим образом:

public static IHtmlString RenderScripts(this HtmlHelper htmlHelper) 
    { 
     var templates = (from object key in htmlHelper.ViewContext.HttpContext.Items.Keys 
         where key.ToString().StartsWith("_script_") 
         select htmlHelper.ViewContext.HttpContext.Items[key]).OfType<Func<object, HelperResult>>() 
          .Select(template => template(null)).ToList(); 
     foreach (var template in templates) 
     { 
      htmlHelper.ViewContext.Writer.Write(template); 
     } 
     return MvcHtmlString.Empty; 
    } 

Тогда на каждом MVC Razor View, когда я хочу, чтобы включить файл .js, который специально для этого рендеринга я называю то, как показано ниже на дне файла:

 @Html.Script(
     @<script src="@Url.Content("~/js/custom/orderdetail.js?t=11172015")" type="text/javascript"></script> 
    ) 

Ниже приведен метод расширения сценария:

 public static MvcHtmlString Script(this HtmlHelper htmlHelper, Func<object, HelperResult> template) 
    { 
     htmlHelper.ViewContext.HttpContext.Items["_script_" + Guid.NewGuid()] = template; 
     return MvcHtmlString.Empty; 
    } 

Это хорошо сработало для нас, и я думаю, что это то, что вы пытаетесь сделать.

+0

приятно! этот вопрос немного устарел .. но я ценю, что вы нашли время, чтобы ответить на него –

5

Боюсь, вам здесь не повезло.
@Section не поддерживается, потому что Sitecore не отображает представления Razor так же, как это делает MVC.
Макет Sitecore MVC в основном представляет собой обычный просмотр, который отображает несколько других частичных представлений или действий контроллера.

Итак, когда создаются заполнители в <body> вашего вида макета, раздел <head> этого макета уже визуализирован.
Нет такой вещи, как отложенный рендеринг в Sitecore MVC, как вы можете сделать с @Section.

Все в представлении выполнено сверху вниз, поэтому, если вы можете поместить свои сценарии в конец вашего макета (например, до </body>), вы все равно можете манипулировать данными в представлениях или действиях, которые выполняются ранее.

1

Действительно, помощник раздела не поддерживается в Sitecore. Если вы используете MVC4, вы можете использовать Bundles для решения вашей проблемы. Для получения дополнительной информации см .: http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification Вы также можете создать несколько пакетов для определенных видов. В одном Bundle вы можете добавить несколько сценариев и вывести их в своем представлении, добавив @ Scripts.Render()

Смежные вопросы