Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Определите ContentPlaceHolder в вашей MasterPage (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-помощника для визуализации тэгов <script>.

Ответ 2

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

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

@{
    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();";
}

Ответ 3

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