Как включить JavaScript из частичного представления в ASP.NET MVC3 - PullRequest
28 голосов
/ 16 января 2011

Я бы хотел предоставить возможность частичным представлениям включать код / ​​файлы JavaScript в нижней части представления. Это позволило бы частичным представлениям включать любые файлы JavaScript, от которых они зависят. Например, если я хотел написать часть, которая должна создать диалоговое окно JQueryUI, я хотел бы импортировать файл JavaScript JQueryUI, а также добавить код JavaScript, который отображает диалоговое окно.

В настоящее время я пишу этот код в родительском представлении, что делает бессмысленным использование частичного представления.

Я понимаю, что вызов RenderPartial несколько раз приведет к тому, что сценарии будут включены несколько раз. Это решаемая проблема, когда я знаю, как на самом деле включить JavaScript в основное представление из частичного представления.

Ответы [ 3 ]

7 голосов
/ 17 января 2011

Определите ContentPlaceHolder на главной странице (ASPX) или Раздел на странице макета (Razor)

ASPX

<body>
  <!-- End of Body -->
  <asp:ContentPlaceHolder ID="JavaScriptIncludes" runat="server" />
</body>

Бритва

<body>
  <!-- End of Body -->
   @RenderSection("JavaScriptIncludes", required: false)
</body>

Тогда в Частичном:

ASPX

<asp:Content ID="ExtraJs" ContentPlaceHolderID="JavaScriptIncludes" runat="server">
   <script type="text/javascript" src="@Url.Content("/Scripts/SomeScript.js")" />
</asp:Content>

Бритва

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

Также подумайте об использовании HTML Helper для рендеринга тегов <script>.

1 голос
/ 07 октября 2016

Вот как вы можете получить частичное представление с кодом JavaScript, который использует любую библиотеку (, даже если библиотеки загружаются в конце страницы )

В вашем частичном представлении add:

@{
    TempData["Script"] += "MyFunction();";
}

<script type="text/javascript">
    function MyFunction() {
        // you can call your library here, e.g. jquery:
        $(function () {

        });
    }
</script>

На странице _Layout.cshtml добавьте после того, как ваши библиотеки включены:

@*LOAD YOUR LIBRARIES HERE (E.G. JQUERY) *@


@if (TempData["Script"] != null)
{
    <script type="text/javascript">
        @Html.Raw(TempData["Script"].ToString())
    </script>
}

Вы можете иметь несколько частичных представлений, присоединяющих их функциик тому же ключу TempData ["Script"].Они будут счастливо сосуществовать, если вы продолжите добавлять функции, используя оператор + = :

@{
    TempData["Script"] += "AnotherFunction();";
}
0 голосов
/ 16 января 2011

Вы можете включить теги <script> в тег <body>, чтобы иметь их в частичном виде.

...