REDIRECTTACTION MET PARAMETER

Ik heb een actie die ik in een anker wil bellen, Site/Controller/Action/IDWaar IDis 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 IDin 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 RouteValueDictionaryniet 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%

RedirectToActionMET 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
}

Other episodes