Ik heb een actie die ik in een anker wil bellen, Site/Controller/Action/ID
Waar ID
is een int
.
Later moet ik naar deze zelfde actie van een controller omleiden.
Is er een slimme manier om dit te doen? Momenteel sta ik ID
in tempdata, maar wanneer u
Hit F5 om de pagina opnieuw te vernieuwen nadat hij teruggaat, is de TempData verdwenen en de paginabonnement.
Antwoord 1, Autoriteit 100%
U kunt de ID doorgeven als onderdeel van de parameter van het routevalues van de methode van de REDIRECTTEACTION ().
return RedirectToAction("Action", new { id = 99 });
Hierdoor zal een omleiding naar site / controller / actie / 99. Geen behoefte aan TEMP of enige vorm van weergave-gegevens.
Antwoord 2, Autoriteit 20%
Kurt’s antwoord moet goed zijn, van mijn onderzoek, maar toen ik het probeerde, moest ik dit doen om echt voor mij te werken:
return RedirectToAction( "Main", new RouteValueDictionary(
new { controller = controllerName, action = "Main", Id = Id } ) );
Als ik de controller en de actie in de RouteValueDictionary
niet heb opgegeven, werkte het niet.
Ook wanneer deze zo is gecodeerd, lijkt de eerste parameter (actie) te worden genegeerd. Dus als u de controller in de dict alleen opgeven en verwacht dat de eerste parameter de actie opgeven, werkt het ook niet.
Als je later langskomt, probeer het Kurt’s antwoord eerst, en als je nog steeds problemen hebt, probeer dan deze.
Antwoord 3, Autoriteit 7%
RedirectToAction
MET PARAMETER:
return RedirectToAction("Action","controller", new {@id=id});
Antwoord 4, Autoriteit 6%
Het is ook vermeldenswaard dat u door meer dan 1 parameter kan passeren. id zal worden gebruikt om een deel van de URL en alle anderen zullen worden doorlopen als parameters na een? in de url en zal urlencoded als standaard.
b.g
return RedirectToAction("ACTION", "CONTROLLER", new {
id = 99, otherParam = "Something", anotherParam = "OtherStuff"
});
Dus de url zou zijn:
/CONTROLLER/ACTION/99?otherParam=Something&anotherParam=OtherStuff
Deze kunnen dan worden verwezen door uw controller:
public ActionResult ACTION(string id, string otherParam, string anotherParam) {
// Your code
}
Antwoord 5, Autoriteit 4%
//How to use RedirectToAction in MVC
return RedirectToAction("actionName", "ControllerName", routevalue);
voorbeeld
return RedirectToAction("Index", "Home", new { id = 2});
Antwoord 6, Autoriteit 4%
MVC voorbeeld 4 …
Merk op dat je niet altijd hoeft te parameter met de naam ID passeren
var message = model.UserName + " - thanks for taking yourtime to register on our glorious site. ";
return RedirectToAction("ThankYou", "Account", new { whatever = message });
En
public ActionResult ThankYou(string whatever) {
ViewBag.message = whatever;
return View();
}
Natuurlijk kunt u tekenreeksen toewijzen aan modelvelden in plaats van ViewBag te gebruiken als dat uw voorkeur heeft.
Antwoord 7, autoriteit 3%
Als je parameter toevallig een complex object is, lost dit het probleem op. De sleutel is de RouteValueDictionary
-constructor.
return RedirectToAction("Action", new RouteValueDictionary(Model))
Als je collecties hebt, wordt het wat lastiger, maar dit andere antwoord dekt dit heel goed.
Antwoord 8, autoriteit 3%
RedirectToAction("Action", "Controller" ,new { id });
Werkte voor mij, hoefde niet new{id = id}
te doen
Ik was aan het omleiden naar binnen dezelfde controller, dus ik had de "Controller"
niet nodig, maar ik weet niet zeker wat de specifieke logica is wanneer de controller als parameter vereist is.
p>
Antwoord 9, autoriteit 2%
Als iemand een foutmelding wil tonen voor [httppost]
dan kan hij/zij het proberen door een ID door te geven met
return RedirectToAction("LogIn", "Security", new { @errorId = 1 });
voor details zoals deze
public ActionResult LogIn(int? errorId)
{
if (errorId > 0)
{
ViewBag.Error = "UserName Or Password Invalid !";
}
return View();
}
[Httppost]
public ActionResult LogIn(FormCollection form)
{
string user= form["UserId"];
string password = form["Password"];
if (user == "admin" && password == "123")
{
return RedirectToAction("Index", "Admin");
}
else
{
return RedirectToAction("LogIn", "Security", new { @errorId = 1 });
}
}
Hoop dat het goed werkt.
Antwoord 10, autoriteit 2%
….
int parameter = Convert.ToInt32(Session["Id"].ToString());
….
return RedirectToAction("ActionName", new { Id = parameter });
Antwoord 11, autoriteit 2%
Ik had dit probleem ook, en een aardige manier om het te doen als je met dezelfde controller werkt, is door benoemde parameters te gebruiken:
return RedirectToAction(actionName: "Action", routeValues: new { id = 99 });
Antwoord 12
Als je moet omleiden naar een actie buiten de controller, zal dit werken.
return RedirectToAction("ACTION", "CONTROLLER", new { id = 99 });
Antwoord 13
Dit kan jaren geleden zijn, maar hoe dan ook, dit hangt ook af van uw Global.asax-kaartroute, aangezien u parameters kunt toevoegen of bewerken om aan uw wensen te voldoen.
bijv.
Global.asax
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
//new { controller = "Home", action = "Index", id = UrlParameter.Optional
new { controller = "Home", action = "Index", id = UrlParameter.Optional,
extraParam = UrlParameter.Optional // extra parameter you might need
});
}
Dan de parameters die u moet passeren, veranderen in:
return RedirectToAction( "Main", new RouteValueDictionary(
new { controller = controllerName, action = "Main", Id = Id, extraParam = someVariable } ) );
Antwoord 14
Deze één regel code doet het:
return Redirect("Action"+id);
Antwoord 15
Het volgende is geslaagd met ASP.NET Core 2.1. Het kan elders van toepassing zijn. De woordenboekcontrolerbase.controlcontext.routedata.Values is direct toegankelijk en beschrijfbaar vanuit de actiemethode. Misschien is dit de ultieme bestemming van de gegevens in de andere oplossingen. Het laat ook zien waar de standaardrouteringsgegevens vandaan komen.
[Route("/to/{email?}")]
public IActionResult ToAction(string email)
{
return View("To", email);
}
[Route("/from")]
public IActionResult FromAction()
{
ControllerContext.RouteData.Values.Add("email", "[email protected]");
return RedirectToAction(nameof(ToAction));
// will redirect to /to/[email protected]
}
[Route("/FromAnother/{email?}")]`
public IActionResult FromAnotherAction(string email)
{
return RedirectToAction(nameof(ToAction));
// will redirect to /to/<whatever the email param says>
// no need to specify the route part explicitly
}