Передайте идентификатор формы ajax при отправке - PullRequest
0 голосов
/ 30 марта 2012

У меня есть несколько ajax-форм на странице, которые содержат одни и те же элементы, у меня есть функция jquery для succes, которая ищет дочерние элементы формы и обновления, но мне нужно как-то передать Id формы, которая отправила запрос контроллеру вместе с другими значениямиИз формы, каков наилучший способ сделать это?Возможно, добавьте скрытое поле в форму и при загрузке страницы получите parentid и поместите его в это поле с помощью jQuery.Но я не знаю, как хорошо это делать.

@using (Ajax.BeginForm("Index", "Controller",new AjaxOptions { OnFailure = "error", OnSuccess ="sucess" }))
           {
                <input type="submit" name="value" class="up" value="1" />
                <span class="result">0</span>
                <input type="submit" name="value" class="down" value="-1" />
           }


 public ActionResult Index(int value ,string formID)
        {
           //do something
        }

function sucess(arg) {

        var json = $.parseJSON(arg.responseText);

        var form = $("form#" + json.FormID);

        var up = form.children('input.up');

        var down = form.children('input.down');

        form.children('span.result').replaceWith(json.Result);

        if (json.Result == 1) {

            up.addClass('active');

        }

        if (json.Result == -1) {

            down.addClass('active');

        }
    }

ОБНОВЛЕНИЕ: это частичное представление, которое загружается n раз, поэтому я не могу найти formID, пока страница не отобразится в браузере.

1 Ответ

6 голосов
/ 30 марта 2012

Вы можете присвоить своей форме уникальный идентификатор и передать этот идентификатор обратному вызову:

@{
    var formId = Guid.NewGuid().ToString();
}
@using (Ajax.BeginForm("Index", "Controller", null, new AjaxOptions { OnFailure = "error", OnSuccess = string.Format("success(data, '{0}')", formId) }, new { id = formId }))
{
    <input type="submit" name="value" class="up" value="1" />
    <span class="result">1</span>
    <input type="submit" name="value" class="down" value="-1" />
}

теперь внутри функции успеха вы сможете получить результат JSON, возвращаемый сервером, и идентификатор формы:

function success(json, formId) {
    // Remark you don't need to call $.parseJSON here.
    // inside the success callback the first argument will already
    // represent a parsed object that you can use directly. This obviously
    // assumes that your controller action returns JSON:
    // return Json(new { Result = 1 });

    var form = $("#" + formId);
    var up = form.children('input.up');
    var down = form.children('input.down');
    form.children('span.result').replaceWith(json.Result);
    if (json.Result == 1) {
        up.addClass('active');
    }
    if (json.Result == -1) {
        down.addClass('inactive');
    }
}
...