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.
Ответы
Ответ 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);
}
}