誰かが助けてくれることを本当に願っています。現在のプロジェクトで 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 から出てくるエラーは「リクエストの処理中に不明なエラーが発生しました」です。このコードを使用すると、デスクトップ ブラウザーですべてがスムーズに実行されます。