Devoluciones de los controladores
En ASP.NET MVC, los controladores pueden devolver varios tipos de resultados, dependiendo de la acción que quieras realizar, como devolver una vista, redirigir a una acción específica, devolver archivos, JSON y otros resultados. Aquí te explico las opciones principales con ejemplos.
1. ViewResult (Vista)
La opción más común es devolver una vista, utilizando View(). Si se llama sin argumentos, busca la vista que corresponde al nombre de la acción en su carpeta de vistas.
Ejemplo:
public class HomeController : Controller
{
// Esta acción devolverá la vista "Index.cshtml" en la carpeta "Home"
public IActionResult Index()
{
return View();
}
// También puedes especificar un nombre de vista diferente
public IActionResult About()
{
return View("Details");
}
// O pasar un modelo a la vista
public IActionResult Contact()
{
var message = "Contáctanos";
return View("Contact", model: message);
}
}
Resumen:
View()→ Devuelve una vista con el mismo nombre que la acción.View("ViewName")→ Devuelve una vista con un nombre específico.View("ViewName", model)→ Devuelve una vista con un modelo.
2. RedirectResult (Redirección a una URL)
Puedes redirigir a una URL específica usando Redirect, útil para redirigir a URLs externas o internas.
Ejemplo:
public IActionResult RedirectToGoogle()
{
return Redirect("https://www.google.com");
}
3. RedirectToActionResult (Redirección a otra acción)
Si deseas redirigir a una acción dentro del mismo controlador o en otro controlador, puedes usar RedirectToAction.
Ejemplo:
public class HomeController : Controller
{
public IActionResult GoToAbout()
{
return RedirectToAction("About"); // Redirige a la acción "About" en el mismo controlador
}
public IActionResult GoToIndexInAccount()
{
return RedirectToAction("Index", "Account"); // Redirige a "Index" en el controlador "Account"
}
public IActionResult GoWithRouteValues()
{
return RedirectToAction("Details", "Product", new { id = 5 });
}
}
Resumen:
RedirectToAction("ActionName")→ Redirige a una acción en el mismo controlador.RedirectToAction("ActionName", "ControllerName")→ Redirige a una acción en otro controlador.RedirectToAction("ActionName", "ControllerName", new { id = 5 })→ Redirige a una acción con parámetros de ruta.
4. RedirectToRouteResult (Redirección a una ruta específica)
Para redirigir a una ruta específica, usa RedirectToRoute. Esto es útil si estás utilizando rutas personalizadas en lugar de redirigir a acciones específicas.
Ejemplo:
public IActionResult GoToRoute()
{
return RedirectToRoute(new { controller = "Home", action = "Index" });
}
Resumen:
RedirectToRoute(routeValues)→ Redirige a una ruta usando valores específicos.
5. JsonResult (Devolver JSON)
Para devolver datos JSON desde una acción (por ejemplo, en una API o una solicitud AJAX), usa Json. Esto convierte el objeto a formato JSON y lo envía al cliente.
Ejemplo:
public IActionResult GetJsonData()
{
var data = new { Name = "Producto1", Price = 15.5 };
return Json(data);
}
Resumen:
Json(object)→ Devuelve un objeto JSON.
6. ContentResult (Devolver Texto Plano)
Si deseas devolver contenido en texto plano o HTML sin una vista, puedes usar Content.
Ejemplo:
public IActionResult HelloWorld()
{
return Content("Hello, World!");
}
public IActionResult HtmlContent()
{
return Content("<h1>Bienvenido</h1>", "text/html");
}
Resumen:
Content(string)→ Devuelve contenido en texto plano.Content(string, "text/html")→ Devuelve contenido HTML.
7. FileResult (Devolver Archivos)
Para devolver un archivo al usuario, como una descarga, puedes usar File con varios tipos de sobrecargas para especificar el archivo y el tipo de contenido.
Ejemplo:
public IActionResult DownloadFile()
{
var fileBytes = System.IO.File.ReadAllBytes("path/to/file.pdf");
return File(fileBytes, "application/pdf", "Document.pdf");
}
Resumen:
File(fileBytes, contentType, fileName)→ Devuelve un archivo para descargar.
8. EmptyResult (Sin Contenido)
EmptyResult devuelve una respuesta sin contenido. Es útil cuando deseas ejecutar una acción pero no necesitas devolver nada.
Ejemplo:
public IActionResult DoNothing()
{
// Realiza alguna lógica pero no devuelve contenido
return new EmptyResult();
}
Resumen:
EmptyResult→ No devuelve contenido.
9. PartialViewResult (Vista Parcial)
Para devolver solo una parte de la vista, puedes usar PartialView. Esto es útil en aplicaciones donde se usa AJAX para cargar secciones de una página.
Ejemplo:
public IActionResult GetPartial()
{
return PartialView("_PartialViewName");
}
public IActionResult GetPartialWithModel()
{
var model = new Product { Name = "ProductoX" };
return PartialView("_PartialViewName", model);
}
Resumen:
PartialView("_PartialViewName")→ Devuelve una vista parcial.PartialView("_PartialViewName", model)→ Devuelve una vista parcial con un modelo.
10. StatusCodeResult (Código de Estado Personalizado)
Si deseas devolver un código de estado HTTP específico, como 404 (No Encontrado) o 500 (Error Interno del Servidor), puedes usar StatusCode.
Ejemplo:
public IActionResult NotFoundExample()
{
return StatusCode(404); // Devuelve un código de estado 404
}
Resumen:
StatusCode(int)→ Devuelve un código de estado HTTP específico.
Ejemplos Resumidos
| Tipo de Resultado | Método | Ejemplo |
|---|---|---|
| Vista | View() |
return View("ViewName"); |
| Redirección a URL | Redirect() |
return Redirect("https://example.com"); |
| Redirección a Acción | RedirectToAction() |
return RedirectToAction("Index", "Home"); |
| Redirección a Ruta | RedirectToRoute() |
return RedirectToRoute(new { action = "Index" }); |
| JSON | Json() |
return Json(new { key = "value" }); |
| Contenido Plano | Content() |
return Content("Texto plano"); |
| Archivo | File() |
return File(fileBytes, "application/pdf"); |
| Sin Contenido | EmptyResult() |
return new EmptyResult(); |
| Vista Parcial | PartialView() |
return PartialView("_PartialViewName"); |
| Código de Estado | StatusCode() |
return StatusCode(404); |
Estas son las formas principales de devolver datos desde un controlador en ASP.NET MVC. Cada tipo de resultado tiene sus propios usos y ventajas según el contexto de tu aplicación.