Saltar al contenido

¿Cuál es la mejor manera de devolver el archivo o mensaje de error de la acción del controlador Asp.net-mvc?

Solución:

Iniciaría una solicitud $ .get a otra acción del controlador que verificaría el recuento de pedidos. Devuelve ese valor, junto con un mensaje de error si corresponde. Muestre el mensaje de error cuando sea necesario; de lo contrario, procese su redirección para descargar su archivo. Es una llamada adicional al controlador, pero le permite tener un control total y manejar la posibilidad de un error sin redirigir a su usuario.

$("#exportPPT").live('click', function (e) {
  $.get( "/Initiative/CheckForOrders" + GenerateParams(), function( data ) {
    if (data.IsValid) {
      window.location.href = "https://foroayuda.es/Initiative/GenerateFile" + GenerateParams();
    } else {
      alert(data.ErrorMessage); // or show a div containing error message
    }
  });
});

Acción del controlador:

public ActionResult CheckForOrders(MyParams myParams)
{
  IEnumerable<Order> orders = Model.GetOrders(myparams);
  if (orders.Any())
    return Json(new { IsValid=true }, JsonRequestBehavior.AllowGet);

  return Json(new { IsValid=false, ErrorMessage="No orders" }, JsonRequestBehavior.AllowGet);
}

¿Devolvería un estado que representa que un recurso no existe y devolvería nulo? Luego, puede manejarlo en consecuencia en su javascript sin preocuparse por hacer múltiples llamadas ajax para verificar que una esté disponible o las implicaciones de seguridad si alguien pasa por alto dichos controles.

Por ejemplo…

Controlador

public ActionResult GenerateFile(MyParams myParams)
{
    var template = Server.MapPath(PPT_ROOT + "/template.pptx");
    IEnumerable<Order> orders = Model.GetOrders(myparams);

    if(!orders.Any()){
        Response.StatusCode = (int)HttpStatusCode.NotFound
        Response.StatusDescription = HttpStatusCode.NotFound.ToString();
        Response.TrySkipIisCustomErrors = true;
        return EmptyResult;
    } 

    var pptResults = GeneratePowerpointFile(orders);
    return new File(pptResults.Content, "application/vnd.ms-powerpoint", pptResults.FileName);
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *