我真的希望有人可以提供帮助。我刚刚克服了当前项目中的一个大障碍,却又遇到了另一个障碍。我的最后期限快到了,所以任何建议都将不胜感激。
我正在使用 MVC4 和 Jquery Mobile 为 iPad 开发一个移动应用程序。在我的应用程序的某个时刻,用户将触发一个弹出框,其中包含“是”和“否”按钮。如果用户单击“是”,我想将一些参数发送到我的控制器中的操作,做一些数据库工作,然后返回将显示在我的主视图中的部分视图(带有更新的模型)。我有以下 jquery 在单击弹出窗口内的 href 按钮时执行。
$(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 是返回局部视图的 Action,WO 是 Controller,#detailsDiv 是主视图中的占位符 div。TestKey 和 TestRequestNumber 是必须传递给 Action 的参数。下面是动作 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 中)。我尝试用“pagecreate”替换“create”,但这实际上消除了桌面浏览器中的 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 的错误是“处理您的请求时发生未知错误”。使用此代码,一切仍可在桌面浏览器上顺利运行。