1

我真的希望有人可以提供帮助。我刚刚克服了当前项目中的一个大障碍,却又遇到了另一个障碍。我的最后期限快到了,所以任何建议都将不胜感激。

我正在使用 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 的错误是“处理您的请求时发生未知错误”。使用此代码,一切仍可在桌面浏览器上顺利运行。

4

1 回答 1

0

事实证明,在 iPad 上,参数没有传递给 $.post。lblTestRequestNum 和 lblTestKey 是我的 JQM 弹出对话框上的标签。见下文:

    <div data-role="popup" id="popupDialog" data-overlay-theme="a" data-theme="b" data-dismissible="false"
        style="max-width:416px;" class="ui-corner-all">

            <div data-role="header" data-theme="a" class="ui-corner-top">
                <h1>Selection <label id="lblTestRequestNum" style="text-align:left;  height:22px; font-size:14px;">@Model.TestRequestNumber</label></h1>
            </div> 
            <div data-role="content" data-theme="a" class="ui-corner-bottom ui-content">      
                <h3 class="ui-title" style="text-align:center; height:22px;">Are you sure?</h3>                             
                <label id="lblTestKeyLabel" style="text-align:left;  height:22px; font-size:14px; margin-left:95px;">Test Key: </label>                  
                <label id="lblTestKey" style="text-align:left;  height:22px; font-size:14px;"></label>  
                <label id="lblTestType" style="text-align:left;  height:22px; font-size:14px; margin-left:95px;"></label>                   
                <a id="popupSubmit" data-role="button" data-inline="true" data-rel="back"
                data-mini="true" data-theme="b" style="width:150px;" type="submit">Yes</a>
                <a href="#" data-role="button" data-inline="true" data-rel="back" 
                    data-mini="true" data-transition="flow" data-theme="b" style="width:150px;">No</a> 
            </div> 

    </div>

在桌面上,Safari 能够从弹出窗口的标签中检索我需要的参数。但在 iPad 上,它不能。所以,我只是在我的主视图中找到了弹出窗口之外的地方来显示/检索我的参数。经验教训:不要期望 iPad 能够从弹出对话框中的标签/输入中读取任何内容。

于 2013-08-17T00:49:02.560 回答