1

誰かが助けてくれることを本当に願っています。現在のプロジェクトで 1 つの大きなハードルを乗り越えたところ、別のハードルにぶつかりました。締め切りが迫っていますので、アドバイスをいただければ幸いです。

MVC4 と Jquery Mobile を使用して iPad 用のモバイル アプリケーションを開発しています。私のアプリのある時点で、ユーザーは「はい」と「いいえ」のボタンを含むポップアップ ボックスをトリガーします。ユーザーが「はい」をクリックした場合、いくつかのパラメーターをコントローラーのアクションに送信し、データベースの作業を行ってから、メイン ビューに表示される部分ビュー (更新されたモデルを含む) を返します。ポップアップ内にある href ボタンをクリックすると実行される次の jquery があります。

    $(function () {
        $("#popupSubmit").bind("tap", tHandler);

        function tHandler(event) {
            $.post('@Url.Action("LoadTestData", "WO")', 
            {TestKey: lblTestKey.innerHTML, TestRequestNumber: lblTestServiceRequestNum.innerHTML }, 
            function (data) { $('#detailsDiv').html(data); $('#detailsDiv').trigger("create"); });
          }
    });

上記のコードで、#popupSubmit は href ボタン、LoadTestData は部分ビューを返すアクション、WO はコントローラー、#detailsDiv はメイン ビューのプレースホルダー div です。TestKey と TestRequestNumber は、アクションに渡す必要があるパラメーターです。以下は、アクション LoadTestData のコードです。_ShowTestPartial は部分ビューです。

    [HttpPost]
    public ActionResult LoadTestData(string TestKey, string TestRequestNumber)
    {
       //do database work
       return PartialView("_ShowTestPartial", model);
    }

これで、このコードはすべて Safari のデスクトップで動作します。ただし、これは iPad では機能しません。私がテストしたところ、ボタンがiPadでクリックされたときにコードがtHandlerイベントになりますが、URL.Actionについて、またはiPadが気に入らないこの方法で部分ビューを返すことについて何かがあります。

iPadでこの問題を解決する方法を知っている人はいますか?

編集(コメントからの追加情報):明確にするために、部分的なビューはiPadではまったくレンダリングされていませんが、デスクトップSafari(およびChrome)ではレンダリングされています. 「create」を「pagecreate」に置き換えてみましたが、実際にはデスクトップ ブラウザの JQM スタイルが取り除かれ、iPad については何も変わりませんでした。

また、バインド関数をどこに配置しても問題ないようです...別の関数として試しました。.ready() と .on('pageinit') で試しました。これらのすべてのケースで、デスクトップの Safari と Chrome では機能しますが、iPad では機能しません。

また、前述したように、.bind("tap") は iPad で動作します。tHandler に他のコードを入れてテストしました。ただし、.$post の一部が iPad では機能しません。

オマール、そしてアイデアを持っている他の人に感謝します。どなたでも大歓迎です!

編集 # 2: Omar のアドバイスで、関数を $(document).on('pageinit') に移動しました。また、$.post にエラー キャッチを追加しました。以下の更新されたコード:

    $(document).on('pageinit', function () {         
        $("#popupSubmit").bind("tap", tHandler);

        function tHandler(event) {
            $.post('@Url.Action("LoadTestData", "WO")', { TestKey: lblTestKey.innerHTML, TestRequestNumber: lblTestRequestNum.innerHTML })
            .done(function (data) { $('#detailsDiv').html(data); $('#detailsDiv').trigger("create"); })
            .fail(function (xhr, textStatus, errorThrown) { alert(xhr.responseText); })
        }
    });

幸いなことに、これにより、iPad で発生しているエラーを確認することができました。残念ながら、$.post から出てくるエラーは「リクエストの処理中に不明なエラーが発生しました」です。このコードを使用すると、デスクトップ ブラウザーですべてがスムーズに実行されます。

4

1 に答える 1