Нокаут и ko.utils.postJson проблема - PullRequest
0 голосов
/ 24 августа 2011

Я использовал какой-то старый пример для MVC2, который использовал атрибут [fromJson] при отправке json в действие контроллера, он работал нормально, за исключением того, что он не перехватывал ошибки модели, поэтому ModelState.IsValid всегда имеет значение true. Затем я увидел, что публикация JSON была встроена в MVC3, поэтому я обновил свой код. Но теперь у меня есть другая проблема :) используя:

ko.utils.postJson(location.href, json); 

Привязка не работает, и моя модель пуста.

Но если я использую JQuery:

$.ajax({
                            url: '@Url.Action("Create")',
                            contentType: 'application/json; charset=utf-8',
                            type: "POST",
                            data: json,
                            dataType: 'json',
                            success: function(result) {
                                alert("yay");
                            },
                            error: function(xhr, ajaxOptions, thrownError) {
                                alert(xhr.statusText + " " + xhr.responseText);
                            }
                        });

Так что я думаю, что переместлю свой ko.utils.postJson в JQuery $ .ajax, но как мне просто опубликовать, чтобы потом я мог выполнить RedirectToAction?

Итак, чтобы уточнить! действие контроллера выглядит так:

public ActionResult Create(QuestionViewModel questionViewModel){

    if (ModelState.IsValid)
    {
        questionViewModel.Save();

        TempData.Add(Config.MODEL, questionViewModel);
        return RedirectToAction("Edit");
    }

    PopulateViewBag();

    return View(questionViewModel);
}

Я нашел это http://groups.google.com/group/knockoutjs/browse_thread/thread/e631a544de2ad51e на форуме Knockout, поэтому ko.utils.postJson - это «нормальная» форма отправки. это то, что я хочу сделать, поэтому поток приложения остается неизменным.

1 Ответ

0 голосов
/ 24 августа 2011

Поскольку $ .ajax () не создает тег <form> и не отправляет его, вы не можете делать такие вещи, как RedirectToAction, во время публикаций ajax.ko.utils.postJson позволил вам сделать все это, потому что он внутренне создал тэг быстрой формы в dom и отправил его через скрипт.

Что вы можете сделать:

$.ajax({
  statusCode: {
    302: function() {
      window.location.replace("http://Domain.com/Controller/Edit")
    }
  }
});

Этот вопрос помог мне найти способ перенаправить браузер через скрипт. На этой странице рассказывается, как обрабатывать различные коды состояния, возвращаемые сервером.ASP.NET MVC3 возвращает код состояния 302 при использовании RedirectToAction () в контроллере.И это можно сделать, добавив соответствующий обработчик, как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...