Ajax.BeginForm передает данные Json обратно на вкладки пользовательского интерфейса Jq

Я пытаюсь заставить 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"
                                }
                            )
              )

После того, как это произойдет, я ожидаю вызвать функцию switchToResultTab, указанную в onSuccess... Которая находится в сценарии на частичном, на котором уже есть вызов метода .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 загружен на последней вкладке, вызывает какой-то конфликт?


person SoftwareSavant    schedule 17.07.2012    source источник


Ответы (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>
person Darin Dimitrov    schedule 18.07.2012
comment
Ошибка времени выполнения Microsoft JScript: объект не поддерживает свойство или метод «действительный». функция, затем я попробовал ваш пример, и это было второе исключение, которое я получил. Чего я не понимаю, так это того, что, по-видимому, мой jquery не загружается. :Расстроенный: - person SoftwareSavant; 18.07.2012
comment
Вы также включили сценарии jquery.validate.js и jquery.validate.unobtrusive.js? Это необходимо, если вы выполняете ненавязчивую проверку на стороне клиента. Я предполагаю, что вы включили только второй, но забыли включить jquery.validate.js. - person Darin Dimitrov; 18.07.2012
comment
хм... нет. Это объяснило бы это... Но почему это выглядит так, как если бы я сохранил свой ajax.beginForm, как будто мой jquery больше не загружается? - person SoftwareSavant; 18.07.2012
comment
Хорошо, может показаться, что не загружается мой jqGrid, а не мой jquery. Я отметил ваш ответный комментарий как ответ, поскольку вы ответили на мой первоначальный запрос. Я должен сказать, что вы, вероятно, лучший гуру jquery на этом сайте! - person SoftwareSavant; 18.07.2012