Para ASP.NET Core
Puede usar el atributo asp-route- *:
<form asp-action="Login" asp-route-previous="@Model.ReturnUrl">
Otro ejemplo detallado:
imagine que tiene un controlador de vehículo 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
<a asp-action="Edit" asp-route-previous="Details" asp-route-id="@Model.CarId">Edit</a>
Index.cshtml
<a asp-action="Edit" asp-route-previous="Index" asp-route-id="@item.CarId">Edit</a>
Edit.cshtml
<form asp-action="Edit" asp-route-previous="@Model.ReturnUrl" class="form-horizontal">
<div class="box-footer">
<a asp-action="@Model.ReturnUrl" class="btn btn-default">Back to List</a>
<button type="submit" value="Save" class="btn btn-warning pull-right">Save</button>
</div>
</form>
En tu 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<VehicleViewModel>(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);
}
Request.Url.AbsolutePath.ToString()
ya que el métodoAccountController
'sLogOn
contiene comprobaciones de URL que comienzan con'/'
, etc.' 'GET Index
entoncesGET Edit
. La URL de referencia es entonces,Index
pero cuando el usuario lo hace,POST Edit
la referencia ahora esEdit
de la solicitud GET anterior. ¿Cómo puedo asegurarme de quePOST Edit
conoce la URL a la que remitió al usuarioGET Edit
?