1

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 メソッド呼び出しが既に含まれているパーシャルのスクリプトにあります。唯一の問題は、私がその機能に入らないことですか? 私はデバッガーをヒットしたことがないので、何かが起こっていることを私に伝えており、その関数を呼び出すことはありません...何が間違っていますか?

更新:私はこのことをデバッグしていて 、何が起こっているのかを理解しようとしています. 私のフォームは 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 ライブラリの 1 つと何らかの形で競合する必要があります...おそらく最後のタブにjqgridをロードしたという事実は、ある種の競合を引き起こしていますか?

4

1 に答える 1

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>
于 2012-07-18T11:50:41.943 に答える