我正在使用VSRC在ASP.net MVC4 razor中开发一个JQuery移动应用程序,在cshtml页面部分脚本编写如下。
@section Scripts
{
<script type="text/javascript">
$(document).ready(function () {
jQuery("#register-form").validationEngine();
});
</script>
}
在layout.cshtml中我有......
"@RenderSection("Scripts", false)".
它适用于初始页面(首先呈现的页面),但是当它通过“ActionLink”链接到其他页面时,那些在这些页面中编写的节脚本不起作用。
有什么想法吗?
请帮助,谢谢。
答案 0 :(得分:3)
按照Erick Bacallao的说法,我会为你提供以下内容:
避免使用URL.Content()来加载.min.js o .js文件。 Scripts.Render()在每个场景中选择正确的文件(Debug中的.js和Release中的.min.js)。
修改后的_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降低了很多。
答案 1 :(得分:1)
我遇到了同样的问题。为了解决这个问题,我只想避免使用“脚本”部分。
从每个页面中删除@section Scripts{
,并将您的js代码放在页面的末尾。
对于您的示例,请务必将@Scripts.Render("~/bundles/jquery", "~/bundles/jquerymobile")
移至_Layout.cshtml中</head>
之前的行。这将保证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 :(得分:0)
这不是由ajax回发引起的吗?
我相信正在发生的事情是dom正在Ajaxified区域中发生变化,而DOM并没有因为document.ready只在页面加载时运行一次而将事件重新绑定到它。
要使其正常工作,您需要在部分更新后重新启动DOM与事件的绑定。
历史上,这一直是ASP.Net updatepanels和docuemt.ready的问题,解决它的方法是将代码放入pageLoad(),而不是每次回发都调用它。不确定这是否适用于MVC。
答案 3 :(得分:0)
我真的不知道为什么也没有时间搞清楚,但今天早上我遇到了同样的问题。当@section scripts
置于cshtml视图页面的根目录时,似乎无法正常工作。以下代码修复了此问题:
@{
@section scripts {
@Scripts.Render("~/bundles/jqueryval")
}
}