У вас есть несколько проблем в представлении:
1) Вы подписаны на событие click
кнопки отправки, не препятствуя выполнению действия по умолчанию при отправке формы.Это запускаемое действие POST, которое перенаправляет в действие контроллера и перезагружает страницу, не оставляя времени для выполнения функции AJAX.Вы должны использовать preventDefault()
для отмены действия кнопки по умолчанию.
2) Контроллер, который получает обратный вызов AJAX, не имеет атрибута [HttpPost]
, когда используется опция type: "POST"
.Попробуйте добавить атрибут [HttpPost]
поверх имени контроллера.
3) Ваш список имен свойств AJAX не совпадает с именами свойств, определенными внутри класса модели.Подумайте об использовании модели представления, которая принимает два свойства и использует ее в качестве параметра действия.
Следовательно, обратный вызов AJAX должен иметь настройку, как показано в следующем примере:
Модель представления
public class SemesterVM
{
public string SemesterCode { get; set; }
public string SemesterName { get; set; }
}
Просмотр
<input type="button" id="btn" value="SAVE" />
JS (событие щелчка)
$('#btn').click(function (e) {
e.preventDefault(); // prevent default submit
var code = $("#SemesterCode").val();
var name = $("#SemesterName").val();
// all property names must be same as the viewmodel has
var jsonData = {
SemesterCode: code,
SemesterName: name
};
$.ajax({
type: "POST",
url: '@Url.Action("SaveSemester", "Student")',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(jsonData),
dataType: "json",
success: function() {
// do something
}
});
});
Действие контроллера
[HttpPost]
public JsonResult SaveSemester(SemesterVM semester)
{
// add semester data
return Json(semester);
}