asp.net mvc ajax form помощник / опубликовать дополнительные данные - PullRequest
1 голос
/ 31 марта 2010

Я хотел бы использовать помощник ajax для создания запросов ajax, которые отправляют дополнительные динамические данные с постом (например, получить последний элемент с class = blogCommentDateTime и отправить значение этого последнего в контроллер, который вернет только комментарии блога после него).

Я успешно сделал это с помощью плагина jQuery Form, например:

 $(document).ready(function () {
        $("#addCommentForm").submit(function () {

            var lastCommentDate = $(".CommentDateHidden:last").val();
            var lastCommentData = { lastCommentDateTicks: lastCommentDate };
            var formSubmitParams = { data: lastCommentData, success: AddCommentResponseHandler }

            $("#addCommentForm").ajaxSubmit(formSubmitParams);
            return false;
        });

Эта форма была создана методом html.beginform ().

Мне интересно, есть ли простой способ сделать это с помощью помощника ajax.beginform ()?

Когда я пытаюсь использовать тот же код, но заменяю html.beginform () на ajax.beginform (), когда я пытаюсь отправить форму, я выдаю 2 сообщения (что понятно, один из которых заботится помощник, другой мной с JS выше. Я не могу создать 2 запроса, поэтому эта опция отсутствует)

Я попытался избавиться от возвращаемого значения false и изменить ajaxSubmit () на ajaxForm (), чтобы он только «подготавливал» форму, и это приводит только к одному сообщению, но не включает дополнительный параметр, который я определил так что это тоже ничего не стоит.

Затем я попытался сохранить ajaxForm (), но вызывал его всякий раз, когда нажимается кнопка отправки в форме, а не когда форма отправляется (я полагаю, это почти то же самое), и это приводит к 2 сообщениям.

Самая большая причина, по которой я задаю этот вопрос, заключается в том, что я столкнулся с некоторыми проблемами, связанными с приведенным выше javascript, и использую валидацию mvc, предоставляемую инфраструктурой mvc (для которой я задам другой вопрос), и хотел бы знать это так Я могу углубиться в мою проблему проверки.

1 Ответ

1 голос
/ 02 апреля 2010
    function beginPost() {
        $("form").ajaxSubmit({ data: { id: "idnum", random: "randomness"} });
        return false;         
    }


using (Ajax.BeginForm(new AjaxOptions{ UpdateTargetId = "TargetDiv", OnBegin = "beginPost" })

Пока это лучший способ, которым я могу придумать. Это хак, поскольку он переопределяет исходную проводку, которую помощник ajax сделал для вас, и в приведенном выше примере (он правильно возвращает мое частичное представление, но updatetargetid, указанное в моем помощнике ajax, не сохраняется, поэтому он в основном отбрасывает ответ, я мог бы исправьте эту настройку этого идентификатора в вызове .ajaxSubmit, но это сводит на нет преимущества использования помощника ajax) Я думаю, что я буду придерживаться моего предыдущего метода использования плагина формы jQuery с помощником html для записи моих форм. в приведенном выше примере я отправляю его вручную с помощью вызова .ajaxSubmit, а затем возвращаю false, чтобы страница не продолжалась, и публикую сообщение, как это сделал помощник ajax. Мой другой метод, который я тоже считаю большим взломом (и я даже не пытался), состоял в том, чтобы попытаться динамически вставлять скрытые поля внутри формы с атрибутом name, установленным на то, что я хотел, чтобы мои дополнительные данные передавались в контроллер и сделать все это в методе beginPost.

Я буду придерживаться нормальной формы и подключу ее с помощью плагина jquery form.

...