Json из JsonAction возвращается как HTML, не вызывая функцию обратного вызова - PullRequest
0 голосов
/ 26 декабря 2011

Я пытаюсь получить простой возврат true / false json из JsonAction, но он продолжает возвращаться как html, не вызывая мою функцию обратного вызова $ (post). Вот коды:

[HttpPost]
public JsonResult RegisterPartial(RegisterModel model)
{

    return Json(new { Success = false }, JsonRequestBehavior.AllowGet);
}

JQuery в .cshtml

$(function () {
        $('#RegisterPartial').live("submit", (function (e) {
            e.preventDefault();

        $.post($(this).attr("action"), $(this).serialize(), function (retorno) {
            if (retorno.Success) {
                alert('success');
                window.location(gup("returnUrl"));
            }
        }, "json");

    }))
});

вот ответ в браузере (проверено в jasonlint.com):

{"Success":false}

Я также пытался использовать contentTypes "application / json" и Encoding.UTF8, но ответом всегда является HTML-страница, а не функция обратного вызова jquery. Также пробовал $ .ajax (), но тот же ответ.

Большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 26 декабря 2011

Непонятно, что такое #RegisterPartial. Это форма? Это должно быть так, как вы подписываетесь на событие отправки. Так что эта форма должна выглядеть так:

@Html.BeginForm("RegisterPartial", "SomeController", FormMethod.Post, new { id = "RegisterPartial" })
{
    ... some input elements

    <button type="submit">OK</button>
}

Это так? Также вы, похоже, видите ошибку javascript (у вас завершающий )) при закрытии анонимной функции .live():

$(function () {
    $('#RegisterPartial').live("submit", (function (e) {
        e.preventDefault();

        $.post($(this).attr("action"), $(this).serialize(), function (retorno) {
            if (retorno.Success) {
                alert('success');
                window.location(gup("returnUrl"));
            }
        }, "json");
    }); // <-- You've had a trailing ) here. 
    // Only one ) is necessary whereas you had 2
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...