Ваш обработчик ошибок ajax будет вызываться, когда действие не возвращает ожидаемый код состояния. Например, он сработает, если действие не было найдено, или если вы сгенерируете исключение, которое не обрабатываете. В вашем случае он будет вызван, если вы не уловите ошибку в своем действии (так как действие вернет код состояния 500).
Я бы, однако, не сделал этого таким образом, поскольку это, вероятно, ожидаемая ошибка. Я бы предпочел вернуть json как в случае успеха, так и в случае ошибки. Затем вы можете указать, если это успешный звонок или нет. Примерно так:
public ActionResult AddToFavourites(int entityId, string entityType)
{
if (!Request.IsAjaxRequest())
throw new InvalidOperationException("This action can be called only in async style.");
try
{
RBParams.EntityType typeOfFavourite = (RBParams.EntityType)Enum.Parse(typeof(RBParams.EntityType), entityType);
string status = "";
if (typeOfFavourite == RBParams.EntityType.BusinessEntity)
{
status = MarkFavouriteEntity(entityId);
}
else if (typeOfFavourite == RBParams.EntityType.Review)
{
status = MarkFavouriteReview(entityId);
}
else
{
throw new InvalidOperationException("The type of the entity is not proper");
}
return Json(new { Success = true, Status = status });
}
catch (Exception ex)
{
return Json(new { Success = false, Message = ex.Message });
}
}
Затем вы обрабатываете его так же, как успешный вызов. Вы просто проверяете свойство Success вашего ответа json. Затем вы обрабатываете непредвиденные ошибки в обратном вызове.