Saltar al contenido

C# ASP.NET MVC Volver a la página anterior

Basta ya de investigar por todo internet porque estás al sitio necesario, tenemos la respuesta que buscas pero sin complicaciones.

Solución:

Supongo (corríjame si me equivoco) que desea volver a mostrar la página de edición si la edición falla y para hacer esto está utilizando una redirección.

Puede tener más suerte simplemente devolviendo la vista nuevamente en lugar de intentar redirigir al usuario, de esta manera también podrá usar ModelState para generar cualquier error.

Editar:

Actualizado en base a los comentarios. Puede colocar la URL anterior en el modelo de vista, agregarla a un campo oculto y luego usarla nuevamente en la acción que guarda las ediciones.

Por ejemplo:

public ActionResult Index()

    return View();


[HttpGet] // This isn't required
public ActionResult Edit(int id)

   // load object and return in view
   ViewModel viewModel = Load(id);

   // get the previous url and store it with view model
   viewModel.PreviousUrl = System.Web.HttpContext.Current.Request.UrlReferrer;

   return View(viewModel);


[HttpPost]
public ActionResult Edit(ViewModel viewModel)

   // Attempt to save the posted object if it works, return index if not return the Edit view again

   bool success = Save(viewModel);
   if (success)
   
       return Redirect(viewModel.PreviousUrl);
   
   else
   
      ModelState.AddModelError("There was an error");
      return View(viewModel);
   

El método BeginForm para su vista tampoco necesita usar esta URL de retorno, debería poder salirse con la suya:

@model ViewModel

@using (Html.BeginForm())

    ...
    

Volviendo a la publicación de la acción de su formulario en una URL incorrecta, esto se debe a que está pasando una URL como el parámetro ‘id’, por lo que el enrutamiento formatea automáticamente su URL con la ruta de retorno.

Esto no funcionará porque su formulario se publicará en una acción de controlador que no sabrá cómo guardar las ediciones. Primero debe publicar en su acción de guardar, luego manejar la redirección dentro de ella.

Para Núcleo de ASP.NET
Puedes usar asp-ruta-* attribute:

Un ejemplo:
Imagina que tienes un controlador de vehículos con acciones

Índice

Detalles

Editar

y puede editar cualquier vehículo desde el índice o desde los detalles, por lo que si hizo clic en editar desde el índice, debe volver al índice después de la edición y si hizo clic en editar desde los detalles, debe volver a los detalles después de la edición.

//In your viewmodel add the ReturnUrl Property
public class VehicleViewModel

     ..............
     ..............
     public string ReturnUrl get;set;




Details.cshtml
Edit

Index.cshtml
Edit

Edit.cshtml

        
    

En su controlador:

// GET: Vehicle/Edit/5
    public ActionResult Edit(int id,string previous)
    
            var model = this.UnitOfWork.CarsRepository.GetAllByCarId(id).FirstOrDefault();
            var viewModel = this.Mapper.Map(model);//if you using automapper
    //or by this code if you are not use automapper
    var viewModel = new VehicleViewModel();

    if (!string.IsNullOrWhiteSpace(previous)
                viewModel.ReturnUrl = previous;
            else
                viewModel.ReturnUrl = "Index";
            return View(viewModel);
        



[HttpPost]
    public IActionResult Edit(VehicleViewModel model, string previous)
    
            if (!string.IsNullOrWhiteSpace(previous))
                model.ReturnUrl = previous;
            else
                model.ReturnUrl = "Index";
            ............. 
            .............
            return RedirectToAction(model.ReturnUrl);
    

Sé que esto es muy tarde, pero tal vez esto ayude a alguien más.

Uso un botón Cancelar para volver a la URL de referencia. En la Vista, intente agregar esto:

@
  ViewBag.Title = "Page title";
  Layout = "~/Views/Shared/_Layout.cshtml";

  if (Request.UrlReferrer != null)
  
    string returnURL = Request.UrlReferrer.ToString();
    ViewBag.ReturnURL = returnURL;
  

Entonces puedes configurar tus botones href así:

Cancel

Aparte de eso, ¡la actualización de Jason Enochs funciona muy bien!

Recuerda algo, que tienes la capacidad de decir si te fue de ayuda.

¡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 *