13

我正在使用 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

4 回答 4

3

按照 Erick Bacallao 的说法,我将建议您执行以下操作:

避免使用 URL.Content() 加载 .min.js 或 .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(就像这样)是一个补丁......不是一个完整的解决方案!用户体验下降了很多。

于 2012-11-02T16:46:02.113 回答
1

我有同样的问题。为了解决这个问题,我只是避免使用“脚本”部分。

从每个页面中删除@section Scripts{并将您的 js 代码放在页面末尾。

对于您的示例,请确保移至_Layout.cshtml@Scripts.Render("~/bundles/jquery", "~/bundles/jquerymobile")中的前</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/

于 2012-10-23T05:21:09.073 回答
0

这不是由ajax回发引起的吗?

我认为正在发生的事情是 dom 在 Ajaxified 区域中发生了变化,并且由于 document.ready 仅在页面加载时运行一次,因此 DOM 没有将事件重新绑定到它。

要使其正常工作,您需要在部分更新后重新启动 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

于 2013-06-04T11:51:42.273 回答
0

我真的不知道为什么,也没有时间弄清楚,但今天早上我遇到了同样的问题。当它被放置在 cshtml 视图页面的根目录时,它似乎@section scripts不起作用。下面的代码解决了这个问题:

@{
    @section scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }
}
于 2017-09-07T11:05:07.180 回答