JQuery After Body ASP.NET MVC 4

17

Я только что создал проект ASP.NET MVC 4 WebAPI.

При взгляде на файл _Layout.cshtml по умолчанию я вижу, что скрипт jquery вставлен после визуализации тела (не в голове).

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/themes/base/css", "~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    @RenderBody()

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>

Это вызывает ошибку

$ is not defined 

, конечно, пытаясь написать

$(document).ready(function() {...}).

Перемещение

@Scripts.Render("~/bundles/jquery")

в головной раздел _Layout.cshtml исправляет проблему, а jquery работает как ожидалось.

Что случилось? Я делаю что-то неправильно, и есть причина для размещения по умолчанию скрипта.Render внутри _Layout.cshtml?

    
задан Jeff 13.08.2012 в 00:37
источник

3 ответа

10

Загрузка скрипта и выполнение блока для рендеринга страницы.

Это можно увидеть, добавив оповещения в несколько частей вашей страницы. Поэтому рекомендуется помещать js-файлы в обратную сторону страницы.

Вы также можете исправить свою проблему, указав раздел для сценариев страниц за тем, где добавлен jquery, в конце страницы.

Изменить: Вот статья Скотта Гатри о разделах в бритве: Ссылка

    
ответ дан linkerro 13.08.2012 в 00:45
  • Как я могу указать это в моем файле cshtml? –  Jeff 13.08.2012 в 00:46
  • Я отредактировал ответ со ссылкой на статью, объясняющую разделы в Razor. –  linkerro 13.08.2012 в 00:50
  • thx за то, что помог мне. Мне пришлось вытолкнуть все остальные сценарии в частичные представления за выполнением главного сценария jquery. –  MUG4N 28.11.2012 в 10:22
3

@Scripts.Render("~/bundles/jquery") вызывает проблему с MVC 4 и VS 2010. Эта проблема становится более очевидной при попытке создать диалог jQuery.

Единственный выход, как заявил JeffN825, - прокомментировать @Scripts.Render("~/bundles/jquery") .

Теперь известно неизвестное: что такое разветвление комментирования @Scripts.Render("~/bundles/jquery") ?

Я использую следующие библиотеки jquery:

<script src="../../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.23.min.js" type="text/javascript"></script>

Примечание: jquery-1.7.2.min.js не будет функционировать.

    
ответ дан Max 23.09.2012 в 18:26
0

Хотя принятый ответ ссылается на подробности о том, как это сделать, более прямой ответ будет следующим:

_Layout.cshtml содержит строку ...

@RenderSection("scripts", required: false)

... который будет вставлять раздел с именем «скрипты», найденный в представлении - например. Index.cshtml:

<p>This is Index.cshtml</p>
@section scripts {
   <script>
      $(document).ready(function() {
         alert("This script is inserted by RenderSection after jQuery script is inserted.")
      })
   </script>
}
    
ответ дан andrew 12.01.2016 в 03:32