Подтвердить что ты не робот

Ajax.BeginForm с OnComplete всегда обновляет страницу

У меня есть простая форма ajax в MVC. В AjaxOptions есть OnComplete, установленный на простое javascript-функцию, которое делает одно - возвращает false.

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { UpdateTargetId = "DivFormId", HttpMethod = "Post", OnComplete = "preventUpdate" }))

function preventUpdate(xhr) {
    return false;       
}

Проблема в том, что эта страница уже обновлена. Например. в одном случае контроллер возвращает частичный вид после обратной передачи, в другом случае он возвращает некоторый объект Json. Я хочу, чтобы он обновлял страницу при возврате частичного представления и показывал диалоговое окно при возврате json. К сожалению, когда json возвращается, он очищает страницу (обновляет ее с помощью json), даже когда функция OnComplete возвращает false, поскольку MSDN говорит: Чтобы отменить обновление страницы, верните false из функции JavaScript.

Как предотвратить обновление страницы в зависимости от полученного ответа?

Спасибо!

----- UPDATE -------

До сих пор я нашел следующее решение. Когда я не укажу UpdateTargetId, я могу сделать вручную с ответом, что хочу. Но это не документированное поведение с возвратом false.

4b9b3361

Ответ 1

Используйте OnSuccess и избавьтесь от UpdateTargetId. Вот так:

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "Post", OnSuccess = "foo" }))
{
    ...
}

а затем:

function foo(result) {
    if (result.SomePropertyThatExistsInYourJsonObject) {
        // the server returned a JSON object => show the dialog window here
    } else {
        // the server returned a partial view => update the DOM:
        $('#DivFormId').html(result);
    }
}