13

VSRC を使用して ASP.net MVC4 カミソリで 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() は、すべてのシナリオで適切なファイルを選択します (デバッグでは .js、リリースでは .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が大幅に低下します。

于 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 ポストバックが原因ではありませんか?

私が信じているのは、Ajax化された領域でDOMが変更されており、ページの読み込み時にdocument.readyが1回しか実行されないため、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 に答える