2013-08-12 4 views
8

В моем общем размещении я хотел бы иметь раздел «скрипты», чтобы заполнить его всеми скриптами, необходимыми для функциональности страницы.Использовать раздел с частичным видом

Layout.cshtml

<html> 
<head> 
    <title>Test</title> 
    <script src="@Url.Content("~/Scripts/jquery-2.0.3.js")" type="text/javascript"> </script> 

    @RenderSection("Scripts", required: false) 

</head> 
<body> 
    @RenderBody() 
</body> 
</html> 

Итак, мой взгляд загружает определенный JavaScript, и я хочу, чтобы это было в разделе «сценариев», и это работает.

Index.cshtml

@model PlatformaPu.Areas.Inventura.Models.Home.Index 

@section Scripts { 
    <script src="@Url.Content("~/Areas/Inventura/Scripts/Home/Index.js")" type="text/javascript"></script> 
} 

{CONTENT REMOVED FOR BREVITY} 

@section Footer { 
    @Html.Partial("~/Views/Shared/_AppSelector.cshtml", Model.AppSelector) 
} 

Наконец, на мой взгляд оказывает частичное и у меня есть JavaScript, что это частичные грузы.

_AppSelector.cshtml

@model PlatformaPu.Models.Shared._AppSelector 

@section Scripts { 
    <script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script> 
} 

{CONTENT REMOVED FOR BREVITY} 

... и это НЕ работа - Javascript тег НЕ отображаются в разделе "сценарии"

Как я могу это сделать?

ответ

11

Как обсуждалось в this question, это не представляется возможным использовать разделы в частичный вид:

Разделы не работают частичным видом, и это дизайн. Вы можете использовать некоторые пользовательские помощники для достижения аналогичного поведения, но, честно говоря, ответственность за включение в него должна включать необходимые скрипты, а не ответственность частичного. Я бы порекомендовал вам использовать раздел @scripts основного представления для этого и не беспокоиться о частичных проблемах с скриптами.

Вы должны добавить ссылку на сценарий к основному виду, которое ссылается на частичное.

+0

Я понял это в то же время; тем не менее, мне интересно сейчас, если это хороший дизайн или нет ... – OzrenTkalcecKrznaric

+0

Вы имеете в виду, является ли ссылка на скрипт в главном представлении хорошим дизайном? Почему вы думаете, что это может быть не так? –

+0

Я имею в виду ссылку на скрипт, который требует дочерняя зависимость. Это может быть плохой дизайн. – OzrenTkalcecKrznaric

3

Это мой первый ответ!

Я работаю с webforms в течение многих лет, и теперь я имею дело с MVC 5. Бит трудно.

Возможно, это неправильное решение, но работает :)

В Layout.cshtml. добавить второй секции "ScriptsPartial"

@RenderSection("ScriptsPartial", required: false) 

В Index.cshtml добавить "новый ViewDataDictionary (ViewData) {{ "ViewPage", это}}"

@section Footer { 
    @Html.Partial("~/Views/Shared/_AppSelector.cshtml", Model.AppSelector, new ViewDataDictionary(ViewData) { { "ViewPage", this } }) 
} 

В _AppSelector. cshtml, удалите этот

@section Scripts { 
    <script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script> 
} 

В _AppSelecto р.cshtml, добавьте это в любом месте

@{ 
    if (ViewData.ContainsKey("ViewPage")) 
    { 
     System.Web.Mvc.WebViewPage viewPage = (System.Web.Mvc.WebViewPage)ViewData["ViewPage"]; 

     viewPage.DefineSection("ScriptsPartial",() => 
     { 
      // viewPage.Write(Scripts.Render("~/AppSelector/Scripts")); // If you use a Bundle 
      viewPage.WriteLiteral("<script src=\"" + Url.Content("~/Scripts/Shared/_AppSelector.js") + "\" type=\"text/javascript\"></script>"); 
     }); 
    } 
} 

Просто «не отправлять» Взгляд на PartialView (не свойство Parent как в WebForms?) и использовать его для добавления контента в разделе «ScriptsPartial».

«ScriptsPartial» необходима потому, что DefineSection выдает ошибку «раздел уже определен: Сценарии»

Таким образом, не более чем один PartialView можно использовать раздел «ScriptsPartial» ... не так хорошее решение.

С наилучшими пожеланиями,

Paco Ferre

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