在iPad上动态渲染局部视图

在iPad上动态渲染局部视图,ipad,jquery-mobile,asp.net-mvc-4,razor,ios6,Ipad,Jquery Mobile,Asp.net Mvc 4,Razor,Ios6,我真的希望有人能帮忙。在我目前的项目中,我刚刚克服了一个大障碍,却又碰到了另一个。我的最后期限很快就要到了,所以任何建议都将不胜感激 我正在使用MVC4和Jquery mobile为iPad开发一个移动应用程序。在我的应用程序中的某个点,用户将触发一个弹出框,其中包含“是”和“否”按钮。如果用户单击“是”,我想向控制器中的操作发送一些参数,执行一些数据库工作,然后返回一个局部视图,其中包含更新的模型,该视图将显示在我的主视图中。我有以下jquery,它在单击弹出窗口中的href按钮时执行

我真的希望有人能帮忙。在我目前的项目中,我刚刚克服了一个大障碍,却又碰到了另一个。我的最后期限很快就要到了,所以任何建议都将不胜感激

我正在使用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"); });
          }
    });
在上面的代码中,popusubmit是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上呈现。我曾尝试用pagecreate替换create,但这实际上去掉了桌面浏览器中的JQM样式,并没有改变iPad的任何内容

我把bind函数放在哪里似乎也无关紧要……我已经尝试将它作为一个单独的函数。我试过了,准备好了,在“pageinit”上。在所有这些情况下,它都适用于桌面Safari和Chrome,但不适用于iPad

另外,正如我之前所说的,.bindtap在iPad上工作。我已经通过在tHandler中放入其他代码进行了测试。然而,$post中的某些内容在iPad上不起作用

谢谢你,奥马尔,还有任何有想法的人。欢迎大家

编辑2:根据奥马尔的建议,我将函数移到了$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产生的错误是在处理您的请求时发生的未知错误。使用此代码,桌面浏览器上的一切仍能顺利运行。

结果是,在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能够从弹出对话框中的标签/输入中读取任何内容。

这是一个重复的问题,如果有,请删除一个。新内容没有增强?到底发生了什么?截图将不胜感激。重要提示:不要在JQM中使用$function或.ready。@Omar尊敬的先生,这不是一个重复的问题,至少如果您谈论的是我自己写的问题。我昨天的问题,我自己回答的,让我走到了这一步,这是一个不同的问题,也就是说,现在它在桌面上工作,我如何让它在iPad上工作。就目前情况而言,iPad上根本没有加载部分视图。您对如何替换$function和.ready有什么建议吗?请注意,此时,$函数不在.ready.My bad中,我在看到答案之前发表了评论。您使用的是什么版本?正如我在前面的评论中提到的,不要使用.ready并尝试将代码绑定到pageinit$document.on'pageinit',函数{code};。然后尝试pagecreate而不是create。JQM很棘手,因此尝试和错误是您最好的朋友。只是想补充一点,在我前面的问题中,$function在.ready中。但现在不是。该功能是独立的。事实上,我的代码已经发生了一些变化,我正在采取一种不同的方法。编辑:刚刚看到你的第二条评论。我会试试这些东西,然后再给你回复。$function{};相当于.ready和pageinit,这是专门为JQM制作的。