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

JQuery After Body ASP.NET MVC 4

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

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

<!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 работает как ожидалось.

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

4b9b3361

Ответ 1

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

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

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

Изменить: Здесь статья Скотта Гатри о разделах в бритве: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

Ответ 2

@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 не будет функционировать.

Ответ 3

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

_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>
}