Я сделал быстрое решение, потому что у меня не хватило времени, и все получилось нормально. Хотя я думаю, что лучшим вариантом является использование фильтра исключений, возможно, мое решение может помочь в том случае, если требуется простое решение.
Я сделал следующее.В методе контроллера я вернулся JsonResult с имущества «Успех» внутри данных:
[HttpPut]
public JsonResult UpdateEmployeeConfig(EmployeConfig employeToSave)
{
if (!ModelState.IsValid)
{
return new JsonResult
{
Data = new { ErrorMessage = "Model is not valid", Success = false },
ContentEncoding = System.Text.Encoding.UTF8,
JsonRequestBehavior = JsonRequestBehavior.DenyGet
};
}
try
{
MyDbContext db = new MyDbContext();
db.Entry(employeToSave).State = EntityState.Modified;
db.SaveChanges();
DTO.EmployeConfig user = (DTO.EmployeConfig)Session["EmployeLoggin"];
if (employeToSave.Id == user.Id)
{
user.Company = employeToSave.Company;
user.Language = employeToSave.Language;
user.Money = employeToSave.Money;
user.CostCenter = employeToSave.CostCenter;
Session["EmployeLoggin"] = user;
}
}
catch (Exception ex)
{
return new JsonResult
{
Data = new { ErrorMessage = ex.Message, Success = false },
ContentEncoding = System.Text.Encoding.UTF8,
JsonRequestBehavior = JsonRequestBehavior.DenyGet
};
}
return new JsonResult() { Data = new { Success = true }, };
}
Позже в Ajax вызова я просто попросил для этого свойства, чтобы знать, если у меня было исключение:
$.ajax({
url: 'UpdateEmployeeConfig',
type: 'PUT',
data: JSON.stringify(EmployeConfig),
contentType: "application/json;charset=utf-8",
success: function (data) {
if (data.Success) {
//This is for the example. Please do something prettier for the user, :)
alert('All was really ok');
}
else {
alert('Oups.. we had errors: ' + data.ErrorMessage);
}
},
error: function (request, status, error) {
alert('oh, errors here. The call to the server is not working.')
}
});
Надеюсь, это поможет. Счастливый код! : P
См. [Beckelmans post] (http://beckelman.net/post/2010/03/18/Handling-Errors-During-Ajax-Calls-With-ASPNET-MVC.aspx) для хорошего примера. Даринс отвечает на это сообщение, но не устанавливает правильный код состояния для ошибки. – Dan
К сожалению, эта ссылка сейчас не работает –
Вот ссылка на машину обратного пути: https://web.archive.org/web/20111011105139/http://beckelman.net/post/2010/03/18/Handling-Errors- Во время-Ajax-Calls-With-ASPNET-MVC.aspx – BruceHill