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.