Дополнительные события jQuery, отправляющие мой Ajax.BeginForm - PullRequest
2 голосов
/ 05 ноября 2008

У меня есть ASP.Net MVC Ajax.BeginForm, который правильно отправляет и обновляет мою страницу, когда я нажимаю кнопку отправки.

Проблема в том, что мне нужны дополнительные события, чтобы сделать то же самое, например, когда они изменяют текст ввода. Дополнительные события правильно отправляют форму, но они обходят входящий javascript, сгенерированный в теге формы Ajax.BeginForm.

Вот тег формы, сгенерированный Ajax.BeingForm:

<form action="/Store/UpdateCart" method="post" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'updatedContent' });"> 

А вот jQuery для привязки других моих событий, которым нужно отправить форму через Ajax:

 $("#ShippingType, #ViewCart .ddl").bind("change", function() { $("#ViewCartPage form").submit() });

Есть какие-нибудь идеи о том, как заставить эти дополнительные события вызывать отправку, как будто мне это тоже нужно?

Ответы [ 5 ]

10 голосов
/ 18 ноября 2008

Решили просто использовать обычную форму, а затем плагин jQuery.Form, и это сработало за 2 секунды! Жаль, что я бы просто пошел этот маршрут первоначально.

var options = {
   target: '#updatedContent',   // target element(s) to be updated with server response 
   beforeSubmit: showRequest,  // pre-submit callback 
   success: showResponse  // post-submit callback 
        };

$('#ViewCartPage form').ajaxForm(options);

Человек, которого я люблю jQuery

3 голосов
/ 05 августа 2009

Microsoft, вероятно, сломает нас, но:

function SubmitMvcAjaxForm(formName) {
    eval('var event = new Object(); event.type="keypress"; ' + document.forms[formName].attributes["onsubmit"].value.replace('(this,', '(document.forms["' + formName + '"],'));
}
0 голосов
/ 09 октября 2011

Я использовал ответ Сичбо в MVC2, но обнаружил, что с MVC3 вам больше не нужны эти обходные пути (т. Е. $ ('# Yourformid'). Submit (); теперь будет работать для вызовов ajax).

0 голосов
/ 13 ноября 2008

Изменение -

bind("change", function() { $("#ViewCartPage form").submit() });

до -

bind("change", function() { $("#ViewCartPage form").onsubmit() });
0 голосов
/ 05 ноября 2008

Это немного сложная проблема в текущей бета-версии MVC. Вы не можете использовать функцию submit (), потому что она не вызовет обработчик onsubmit. Вместо этого вы должны вызывать обработчик onsubmit напрямую. Единственная хитрость в том, что вам нужно передать аргумент в onsubmit () при его вызове. Этот аргумент становится параметром «event» в обработчике (см. Часть «new Sys.UI.DomEvent (event)»). Параметр «event» используется сценариями MVC Ajax для отмены поведения по умолчанию, когда вы нажимаете кнопку «Отправить», чтобы работа Ajax могла происходить непрерывно.

Итак, если вы измените свой код на это:

$("#ShippingType, #ViewCart .ddl").bind("change", function() { $("#ViewCartPage form").onsubmit({ preventDefault: function() {} }) });

Событие onsubmit () будет срабатывать при изменении полей формы. В коде создается «фальшивый» объект события, который реализует метод protectDefault () (единственный, который используют помощники Ajax MVC), поэтому вы не получите ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...