.net Mvc 3 Ajax.BeginForm, получить элемент формы - PullRequest
5 голосов
/ 30 июля 2011

Я пытаюсь работать с элементом формы dom с помощью подпрограмм OnBegin и OnComplete помощника Ajax.BeginForm в Mvc.

В настоящее время у меня есть это:

@using (Ajax.BeginForm("Contact", "Home", new AjaxOptions { OnBegin = "handleOnBegin" }))

Но в обработчиках OnBegin / OnComplete я хочу работать с элементом dom формы - это будет возможно? Я проверил аргументы, переданные этим обработчикам, и ничего не вижу.

function handleOnBegin(a, b){
  var f = <get form>;
  animateForm(f);
}

Я даже пытался передать 'this' с обработчиками, но кажется, что он только передает объект XHR (или что-то похожее) ... Кроме того, я неохотно бьюсь об этом с передачей идентификаторов и добавлением большего количества кода, когда я Я уверен, что есть более простой способ.

Ответы [ 3 ]

6 голосов
/ 30 июля 2011

Идентификатор вашей формы в качестве 4-го параметра для Ajax.BeginForm:

@using (Ajax.BeginForm("Contact", "Home", 
        new AjaxOptions { OnBegin = "forms.onBegin", OnComplete = "forms.onComplete" },
        new { id = "FormName" }))

Затем вы можете выбрать форму по идентификатору (#FormName).

Редактировать:

Или посмотрите ответы на этот вопрос

1 голос
/ 31 июля 2011

Я также посмотрел на аргументы и не вижу ничего, что поможет из коробки.Другой вариант - добавить функцию в вашу библиотеку, которая добавит обработчик события onclick к кнопкам на вашей странице.Что-то вроде

var clickedBtnID = null;
$(document).ready(function()) {
    $(input[type=submit]).click(function() {
        clickedBtnID = $(this).attr("id");
    }
}

Тогда вы можете получить доступ к clickedBtnID из функции обратного вызова.Не идеальное решение, но оно может быть достаточно общим.

0 голосов
/ 30 июля 2011

Дайте CSS-классы тем элементам DOM, с которыми вы хотите работать.Таким образом, вы можете найти элементы по классам CSS, даже если форма является частичной и вложена, например, в другие элементы.

Примерно так:

$form.find(".labelToUpdate").text(response.labelText);
...