В вашем коде есть несколько проблем:
1) Вы передаете строку JSON, содержащую свойства viewmodel, необходимо установить опцию contentType: 'application/json; charset=utf-8'
в обратном вызове AJAX, чтобы механизм связывания модели распознал ее как параметр viewmodel.
2) return View()
не применимо для ответа AJAX, вместо этого используйте return PartialView()
и поставьте html()
, чтобы отобразить ответ в целевом элементе.
Следовательно, вы должны использовать настройку AJAX какниже:
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(list),
contentType: 'application/json; charset=utf-8',
success: function (result) {
$('#targetElement').html(result);
},
error: function (xhr, status, err) {
// error handling
}
});
Действие контроллера
[HttpPost]
public ActionResult Process(Hello model)
{
if (ModelState.IsValid)
{
using (db = new DB())
{
// save data
}
ViewBag.Message = "Success";
return PartialView("_PartialViewName", model);
}
else
{
ViewBag.Message = "Failed";
return PartialView("_PartialViewName", model);
}
}
Помните, что обратный вызов AJAX предназначен для обновления определенного элемента HTML без перезагрузки всей страницы просмотра.Если вы хотите перезагрузить страницу с отправленными результатами, используйте вместо этого обычную форму отправки (с Html.BeginForm()
).