Я использовал какой-то старый пример для 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 - это «нормальная» форма отправки. это то, что я хочу сделать, поэтому поток приложения остается неизменным.