Вопрос по asp.net-mvc-3, jquery, actionmethod – $ .post легче кодировать, но с .ajax вы получаете большую глубину конфигурации, обработки ошибок, ..
м проекте ASP.net mvc3 я использую ajax-вызов для отправки данных json в метод создания действий в контроллере Company. Но когда я отлаживаю вызов ajax, он всегда заканчивается результатом ошибки, а не результатом успеха.
вызов ajax:
$.ajax({
url: '/Company/Create',
type: 'POST',
data: JSON.stringify(CreateCompany),
dataType: 'Json',
contentType: 'application/json; charset=utf-8',
success: function () {
alert('ajax call successful');
},
error: function () {
alert('ajax call not successful');
}
});
Мой метод действий в контроллере компании:
[HttpPost]
public ActionResult Create (Company company)
{
try
{
//Create company
CompanyRepo.Create(company);
return null;
}
catch
{
return View("Error");
}
}
Я уже отладил метод действия, но он завершает его так, как должен. Таким образом, данные, отправленные с помощью вызова ajax, будут обработаны и записаны в базу данных. (метод действия не использует часть catch).
Почему мой вызов ajax по-прежнему выдает сообщение «вызов ajax не выполнен»?
Разве это не будет проще:
$.post("/Company/Create", function (d) {
if (d.Success) {
alert("Yay!");
} else {
alert("Aww...");
}
}, "json");
И в вашем контроллере.
[HttpPost]
public JsonResult Create(
[Bind(...)] Company Company) { <- Should be binding
if (this.ModelState.IsValid) { <- Should be checking the model state if its valid
CompanyRepo.Create(Company);
return this.Json(new {
Success = true
});
};
return this.Json(new {
Success = false
});
}
я сделал, так это установил dataType на "text json" :)) Если это не поможет, попробуйте получить дополнительную информацию, узнав подробности вашей ошибки, т.е.
$.ajax({
url: '/Company/Create',
type: 'POST',
data: JSON.stringify(CreateCompany),
dataType: 'text json',
contentType: 'application/json; charset=utf-8',
success: function () {
alert('ajax call successful');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
}
});
Кстати, я нашел это решение где-то на StackOverflow
Почему ты возвращаешьсяnull
в случае успеха в вашем действии контроллера? Верните что-нибудь к успеху, например, объект JSON (особенно, как вы указали в своем запросе AJAX, что ожидаете ответа JSON от сервера - с помощьюdataType: 'json'
настройка - которая должна быть в нижнем регистреj
Кстати):
return Json(new { success = true });
contentType
Часть вызова Ajax также бессмысленна. Кроме того, если есть{success = true}
для попытки, то должно быть{success = false}
для улова, и, следовательно, все действие может быть помечено какJsonResult
.
Gup3rSuR4c