【问题标题】:Ajax.BeginForm pass Json data back to Jq UI tabsAjax.BeginForm 将 Json 数据传回 Jq UI 选项卡
【发布时间】:2012-07-17 21:28:27
【问题描述】:

我试图让 Ajax.BeginForm 调用一个函数,然后将其传递回序列中的最后一个选项卡并从那里附加一个表。

这将是基本的局部视图...

<script type="text/javascript">
    $(function () {
        $("#searchPatient").tabs();
    });
    function switchToResultTab(data) {
        $('a[href="#retTable"]').click();
        debugger;
        $("#list").setGridParam({
            datatype: 'jsonstring',
            datastr: data,
            caption: 'Patient Search Result'
        }).trigger("reloadGrid");
    };

    function failToTab(data) {
        alert("");
        $("list").setGridParam({
        datatype:'jsonstring',
        caption: 'Patient Search Result',
        datastr:data
        }).trigger("reloadGrid");
    };
</script>
<div id="searchPatient" style="display:inline; float:inherit; width:100%">
    <ul>
        <li><a href="#searchByMRN">Search By MRN</a></li>
        <li><a href="#searchByDemographics">Search By Demo</a></li>
        <li><a href="#retTable">Return Table</a></li>
    </ul>
    @Html.Partial("_SearchByMRN")
    @Html.Partial("_SearchByDemographic")
    @Html.Partial("_RetTable")


</div>

这就是我异步调用函数的方式...到目前为止一切正常...

@using(Ajax.BeginForm("SearchByDemographic",
                            "SearchPatients",
                            null,
                            new AjaxOptions{
                                HttpMethod = "POST",
                                InsertionMode = InsertionMode.Replace,
                                LoadingElementId = Url.Content("~/Images/ajax-loader.gif"),
                                UpdateTargetId = "retTable",
                                OnSuccess = "switchToResultTab(data)",
                                OnFailure = "FailToTab"
                            }, 
                                new{
                                    id = "formSearchByMRN"
                                }
                            )
              )

完成此操作后,我希望调用 onSuccess... 中列出的 switchToResultTab 函数...该函数位于已调用 .tabs() jquery 方法的部分脚本中。唯一的问题是我从来没有进入过那个功能?我从来没有打过调试器,所以这告诉我正在发生一些事情,我从来没有调用过那个函数...... 我做错了什么?

更新:我正在调试这件事,并试图弄清楚发生了什么 好的,所以我一直在调试这个东西,似乎我的 jquery 函数永远不会激活。看来我的表单正在执行实际提交而不是 ajax 提交。到目前为止,这是我可以推测的。我完全不知道为什么会这样。 继续 *更新:尝试了几种不同的方法* 小更新...在与 Ajax.BeginForm 苦苦挣扎之后,我回到了我尝试过且真实的 Html.BeginForm 方法并编写了自己的 jquery 函数...

$('#searchByDemographics').submit(function () {//#formSearchByMRN, 
    if ($(this).valid()) {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (result) {
                $('#retTable').html(result);
                switchToResultTab(result);
            }
        });
    }
    return false;
});

在这两种情况下,当我走到这一步时,似乎不知何故我的 Jquery 库已不再加载……它必须以某种方式与我已加载的其中一个 jquery 库发生冲突。 . 也许我在最后一个选项卡上加载了 jqgrid 的事实导致了某种冲突?

【问题讨论】:

    标签: jquery-ui-tabs ajax.beginform


    【解决方案1】:

    在您的AjaxOptions 中,尝试替换:

    OnSuccess = "switchToResultTab(data)"
    

    与:

    OnSuccess = "switchToResultTab"
    

    还要确保您已将 jquery.unobtrusive-ajax.js 脚本包含到您的页面中,否则,Ajax.BeginForm 将像普通表单一样:

    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
    

    【讨论】:

    • Microsoft JScript 运行时错误:对象不支持属性或方法“有效”Microsoft JScript 运行时错误:“jQuery”未定义来解释我遇到的第一个异常,我将 Ajax.begin 表单切换为Html.BegingForm 和我写了一个 jquery 函数,然后我尝试了你的例子,这是我得到的第二个异常,我不明白的是,显然我的 jquery 没有被加载。 :沮丧:
    • 您是否也包含了jquery.validate.js 和jquery.validate.unobtrusive.js 脚本?如果您正在进行不显眼的客户端验证,则这些是必需的。我猜你只包含了第二个但忘记包含jquery.validate.js。
    • 嗯...我没有。这可以解释...但是为什么它看起来好像,如果我保留我的 ajax.beginForm,就好像我的 jquery 不再加载一样?
    • 好吧,好像我的 jqGrid 没有被加载,而不是我的 jquery。当您回答我最初的询问时,我将您的回答评论标记为答案。我必须说你可能是这个网站上最好的 jquery 大师!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多