【发布时间】:2013-08-16 21:13:01
【问题描述】:
我真的希望有人可以提供帮助。我刚刚克服了当前项目中的一个大障碍,却又遇到了另一个障碍。我的最后期限快到了,因此非常感谢任何建议。
我正在使用 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 解决这个问题吗?
编辑(来自 cmets 的附加信息):需要明确的是,部分视图根本不会在 iPad 上呈现,而是在桌面 Safari 上(以及在 Chrome 中)。我尝试用“pagecreate”替换“create”,但这实际上取消了桌面浏览器中的 JQM 样式,并且没有改变 iPad 的任何内容。
我将绑定函数放在哪里似乎也无关紧要......我已经尝试将它作为一个单独的函数。我已经在 .ready() 和 .on('pageinit') 中尝试过。在所有这些情况下,它都适用于桌面版 Safari 和 Chrome,但不适用于 iPad。
另外,正如我之前所说,.bind("tap") 可以在 iPad 上运行。我已经通过将其他代码放入 tHandler 中进行了测试。但是 .$post 中的某些内容在 iPad 上不起作用。
感谢 Omar 以及其他任何有想法的人。欢迎大家!
编辑 #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 的错误是“处理您的请求时发生未知错误”。使用此代码,一切仍可在桌面浏览器上顺利运行。
【问题讨论】:
-
这是一个重复的问题,如果有,请删除一个。新内容不是增强了吗?究竟发生了什么?截图将不胜感激。重要提示:不要在 JQM 中使用
$(function)或.ready()。 -
@Omar 尊敬的先生,这不是一个重复的问题(至少如果您谈论的是我自己写的问题)。昨天我自己回答的问题让我明白了这一点,现在这是一个不同的问题(即,现在它可以在桌面上运行,我如何让它在 iPad 上运行)。就正在发生的事情而言,部分视图根本没有加载到 iPad 上。您对用什么替换 $function 和 .ready() 有什么建议吗?请注意,此时 $function 不在 .ready() 中。
-
我的错,我在看到答案之前发表了评论。你用的是什么版本?正如我在之前的评论中提到的,不要使用 .ready 并尝试将您的代码绑定到
pageinit。$(document).on('pageinit', function () { code });。并尝试pagecreate而不是create。 JQM 很棘手,因此 反复试验 是你最好的朋友。 -
只是想补充一点,在我之前的问题中,$(function) 在 .ready() 中。但不是现在。功能是分开的。事实上,我的代码发生了一些变化,我正在采取不同的方法。编辑:刚刚看到你的第二条评论。我会尝试这些事情并回复你。
-
$(function() { });等价于.ready()和pageinit是专门为 JQM 制作的。
标签: ipad jquery-mobile asp.net-mvc-4 razor ios6