部分脚本不在ASP.net MVC4剃刀中呈现

时间:2012-10-05 06:36:52

标签: jquery-mobile razor asp.net-mvc-4

我正在使用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”链接到其他页面时,那些在这些页面中编写的节脚本不起作用。

有什么想法吗?

请帮助,谢谢。

4 个答案:

答案 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。

结帐以获取更多信息http://www.dotnet-tricks.com/Tutorial/aspnet/D719120612-Difference-between-document.ready-and-window.onload-or-pageLoad.html

答案 3 :(得分:0)

我真的不知道为什么也没有时间搞清楚,但今天早上我遇到了同样的问题。当@section scripts置于cshtml视图页面的根目录时,似乎无法正常工作。以下代码修复了此问题:

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