En mi aplicación ASP.NET MVC 2 utilizo HandleErrorAttribute para mostrar una página de error personalizada en caso de excepciones no controladas, y funciona perfectamente a menos que la excepción ocurra en una acción llamada por Ajax.ActionLink. En este caso, no pasa nada. ¿Es posible usar HandleErrorAttribute para actualizar el elemento de destino con el contenido de una vista parcial "Error.ascx"?¿Cómo puedo hacer que HandleErrorAttribute funcione con Ajax?
5
A
Respuesta
11
Para lograr esto se podría escribir un filtro de acción personalizada:
public class AjaxAwareHandleErrorAttribute : HandleErrorAttribute
{
public string PartialViewName { get; set; }
public override void OnException(ExceptionContext filterContext)
{
// Execute the normal exception handling routine
base.OnException(filterContext);
// Verify if AJAX request
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
// Use partial view in case of AJAX request
var result = new PartialViewResult();
result.ViewName = PartialViewName;
filterContext.Result = result;
}
}
}
Y a continuación, especifique la vista parcial a utilizar:
[AjaxAwareHandleError(PartialViewName = "~/views/shared/error.ascx")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult SomeAction()
{
throw new Exception("shouldn't have called me");
}
}
Y, finalmente, en su opinión, suponiendo que tiene el siguiente enlace :
<%= Ajax.ActionLink("some text", "someAction", new AjaxOptions {
UpdateTargetId = "result", OnFailure = "handleFailure" }) %>
usted podría hacer la función para actualizar el handleFailure
div adecuada:
<script type="text/javascript">
function handleFailure(xhr) {
// get the error text returned by the partial
var error = xhr.get_response().get_responseData();
// place the error text somewhere in the DOM
document.getElementById('error').innerHTML = error;
}
</script>
Cuestiones relacionadas
- 1. ¿Cómo puedo hacer que OData DELETE funcione?
- 2. ¿Cómo puedo hacer que funcione este DataTrigger?
- 3. ¿Cómo puedo hacer que perltidy funcione con Method :: Signatures?
- 4. ¿Cómo hacer que HTML5 funcione con DOMDocument?
- 5. ¿Cómo hacer que SVG funcione con IE?
- 6. ¿Cómo hacer que file_get_contents() funcione con HTTPS?
- 7. ¿Cómo puedo hacer que este one-liner funcione en DOS?
- 8. ¿Cómo puedo hacer que ScrollViewer funcione dentro de un StackPanel?
- 9. ¿Cómo puedo hacer que Matlab Compiler funcione más rápido?
- 10. ¿Cómo puedo hacer que VML funcione en modo estándar?
- 11. ¿Cómo puedo hacer que funcione la compresión gzip en IIS7?
- 12. ¿Cómo puedo hacer que mousewheel funcione en VB6 IDE?
- 13. ¿Cómo puedo hacer que un hipervínculo funcione en un RichTextBox?
- 14. Cómo hacer que CC-Tray funcione
- 15. Cómo hacer que funcione PREPARE TRANSACTION
- 16. ¿Cómo hacer que funcione APC (PHP Cache)?
- 17. ¿Cómo hacer que = NULL funcione en SQLite?
- 18. ¿Cómo hacer que mssql funcione con PHP 5.3?
- 19. ¿Cómo hacer que Django slugify funcione correctamente con cadenas Unicode?
- 20. ¿Cómo hacer que Qt Creator funcione con CDB?
- 21. Cómo hacer que Uploadify funcione con asp.net-mvc
- 22. ¿Cómo podemos hacer que kCAOnOrderOut funcione?
- 23. ¿Cómo hacer que Java funcione con SQL Server?
- 24. ¿Cómo hacer que doxygen funcione más rápido?
- 25. No sé cómo hacer que __slots__ funcione
- 26. ¿Cómo hacer que este javascript funcione?
- 27. ¿Cómo hacer que lxml funcione en IronPython?
- 28. ¿Cómo hacer que CDT/Eclipse funcione con C + + 11 hilos?
- 29. ¿Cómo hacer que MvcScaffold funcione con modelos externos?
- 30. Cómo hacer que mi función de 'clic' funcione con iOS
Esta página es también vale la pena leer, ya que añade más información a este respecto: http://jimmylarkin.net/post/2011/09/30/MVC-3-HandleError-Attribute-and- AJAX-Forms.aspx –