我正在使用ASP.NET MVC开发一个网站.我正在使用jquery进行AJAX功能.在动作方法中,我想返回一些错误,表示输入不正确或无法执行动作.在这种错误的情况下,我期望jquery ajax错误处理程序被调用,我可以在那里采取适当的措施.我没有找到一个如何做到这一点的方法.以下是我的动作方法.
在错误的情况下,我应该从一个Action发送什么来获取jquery错误处理程序?
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 Content(status); } catch (Exception ex) { return Content("Error"); } }
解决方法
当操作不返回预期状态代码时,将调用您的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 }); } }