Раздел script не отображается в ASP.NET MVC4 бритве

Я разрабатываю мобильное приложение JQuery в брандмауэре ASP.net MVC4, используя VSRC. В сценариях страницы cshtml написано следующее.

@section Scripts
 {
  <script type="text/javascript">
     $(document).ready(function () {
        jQuery("#register-form").validationEngine();
  });
 </script>
}

В layout.cshtml у меня есть...

"@RenderSection("Scripts", false)".

Он работает для начальной страницы (страница, которая отображается первой), но когда она связана через "ActionLink" с другими страницами, тогда раздел script, написанный на этих страницах, не работает.

Любые идеи?

Пожалуйста, помогите, спасибо.

Ответ 1

У меня была та же проблема. Чтобы обойти это, я просто избегаю раздела "Скрипты".

Удалите @section Scripts{ с каждой страницы и поместите код js в конец страницы.

В вашем примере не забудьте переместить @Scripts.Render("~/bundles/jquery", "~/bundles/jquerymobile") в строку до </head> в _Layout.cshtml. Это гарантирует, что jquery будет загружен, когда он достигнет $(document).ready(function () {...

===============================================

объяснение, почему это происходит, и другое решение. http://lextell.com/blog/2012/10/23/script-section-is-not-rendered-in-asp-net-mvc-4-jquery-mobile-when-navigate-to-another-page-2/

Ответ 2

Следуя линии Эрика Бакаллао, я буду вам пригодиться:

Избегайте использования URL.Content() для загрузки файлов .min.js o.js. Scripts.Render() выбирает правильный файл в каждом сценарии (.js в Debug и .min.js в Release).

Измененный файл _Layout.cshtml будет выглядеть следующим образом:

    @Scripts.Render("~/bundles/jquery")
    <script type="text/javascript">
        $(document).bind("mobileinit", function () {
            $.mobile.ajaxEnabled = false;
        });
    </script>
    @Scripts.Render("~/bundles/jquerymobile")
    @RenderSection("scripts", required: false)

ПРИМЕЧАНИЕ. Отключение jQuery MObile AJAX (как это делает) - это патч... не полное решение! UX значительно сокращает.

Ответ 3

Разве это не вызвано обратной записью ajax?

То, что я считаю, заключается в том, что dom изменяется в области Ajaxified, а DOM не перепроверяет события к нему из-за того, что document.ready работает только один раз при загрузке страницы.

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

исторически это всегда было проблемой с ASP.Net-пакетами обновлений и documentemt.ready, способ обойти это, чтобы поместить код в pageLoad(), так как это вызвало каждую обратную передачу.

Не уверен, что это будет работать с MVC.

Оформить заказ для получения дополнительной информации http://www.dotnet-tricks.com/Tutorial/aspnet/D719120612-Difference-between-document.ready-and-window.onload-or-pageLoad.html

Ответ 4

Я действительно не знаю, почему и еще не успел разобраться, но сегодня утром у меня была такая же проблема. Кажется, что @section scripts не работает, когда он помещается в корень страницы просмотра cshtml. Следующий код исправляет это:

@{
    @section scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }
}