Раздел 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")
}
}