2016-04-30 7 views
2

Ich habe zwei Aktionsmethode in der folgenden controller-senden Abfrage-Zeichenfolge in RedirectToAction MVC

public class VisitMasterController 
{ 
    public ActionResult StartBrVisit() 
    { 
     string id=(Request.QueryString["id"].ToString(); //value=null here 
    } 

    public ActionResult BrNotPresent() 
    { 
     return RedirectToAction("StartBrVisit","VisitMaster" , new { id = "id", name = "name" }); 
    } 
{ 

Nach Redirect, Request.QueryString["id"] gibt null zurück.

Meine Standardroute Config is-

  context.MapRoute(
     "BR_default", 
     "BR/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional }, 
     new[] { "OpinionLeader.Areas.BR.Controllers" } //add this line 
    ); 

Jede Hilfe?

+0

Sind Sie die Standardrouten mit mit '.../{id}'? Und warum nicht einfach 'public ActionResult StartBrVisit (int id)'? –

+0

@StephenMuecke - Ja, es gibt eine Standardroute mit Namens-ID. Ich habe meine Frage aktualisiert. Ich muss hier Zeichenfolge verwenden. –

+0

Dann machen Sie einfach die Methode 'public ActionResult StartBrVisit (string id)' (und Sie könnten auch 'string name' hinzufügen). Der Wert "id" wird als Routenwert und nicht als Abfragezeichenfolgewert hinzugefügt, sodass Sie auch 'Request.RequestContext.RouteData.Values ​​[" id "]' –

Antwort

1

Sie eine Route mit einem Parameter id so genannt, definiert haben, wenn Sie new { id = "id" } verwenden, die RedirectToAction() Methode eine Übereinstimmung findet und den Wert als Route Wert addiert, kein Wert Query-String (im Fall von name, gibt es keine Übereinstimmung, daher wird der Wert als Abfragezeichenfolgenwert hinzugefügt). Man könnte es

string id = (string)Request.RequestContext.RouteData.Values["id"] 

jedoch unter Verwendung von zugreifen, wäre es viel einfacher sein, einen Parameter zu Ihrer Methode hinzufügen

public ActionResult StartBrVisit(string id) 
Verwandte Themen