У меня есть ситуация, когда я отправляю данные в контроллер через jQuery $ .ajax, данные представляют собой сериализованную строку json.(MVC 3.0)
Это хорошо связывает - мой контроллер получает результаты, и они верны.Теперь у меня возникла проблема с отправкой обратной проверки.Я подозреваю, что это связано с тем, что не все мои объекты изначально должны формировать элементы управления.
Проблема в том, что мне нужно «добавить» данные в мою модель, используя javascript, потому что для модели требуется элемент из коллекции.Используя javascript, jquery и шаблоны, я выбрал этот элемент и добавляю его в модель, прежде чем он отправит его в контроллер.Однако при обратной передаче эти данные отсутствуют (что ожидается, так как пришлось бы десериализовать их в массив javascript - это не моя проблема).
Моя проблема в том, что онивыполняет двойной постбэк для проверки или вообще ничего.Если я использую e.preventDefault();
, чтобы прекратить отправку обычной формы, я никогда не получу подтверждение.Но если я не использую это, то я всегда получаю двойной пост, что, на мой взгляд, никогда не перенаправляет.
Мой код jQuery выглядит следующим образом ..
$('form').submit(function(e){
var data = $('form').serializeObject();
data.Quality = // this line adds some data from a JSON object.
var json = JSON.stringify(data);
$.ajax({
url: location.href,
type: 'POST',
dataType: 'json',
data: json,
contentType: 'application/json',
success: function (data) {
$("#jsonOutput").html(json);
}
});
e.preventDefault();
});
Вот функция serializeObject.
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
Вот мое действие контроллера.
[HttpPost]
public ActionResult Blueprint(Blueprint blueprint)
{
if (ModelState.IsValid)
{
using (var context = new Mapping.DataContext())
{
context.Blueprints.Add(blueprint);
context.SaveChanges();
return Json(Redirect("/List/Blueprints"));
}
}
return View(blueprint);
}
Я опубликую больше кода, если потребуется, однако я думаю, что этовсе что актуально.Я использую библиотеку knockoutjs
для шаблонов, если это вообще актуально.Пожалуйста, скажите мне, что еще нужно увидеть, если это применимо.