2016-05-25 14 views
0

ich eine Route alsWie kann man wissen, welche Route zur Zeit abgebildet wird

routes.MapRoute(
       "User", // Route name 
       "Person/{action}", // URL with parameters 
       new { controller = "User" } // Parameter defaults 
      ); 

haben, das heißt, wenn ich url setzen wie

http://localhost/myApp/Person/Detail 

dann sollte es Detail Wirkung User Controller aufrufen, nicht wahr?

Ok, ich habe es getan und Routing funktioniert auch gut, bedeutet es Aktion richtig aufrufen.

Nun, wenn ich will Controller-Namen erhalten, dann werde ich

ControllerContext.RouteData.Values["controller"]; 

verwenden und das gibt mir User, aber ich will es Person (das heißt, wie in URL) sein. Wie kann ich das bekommen?

+0

Nicht getestet, aber liefert 'HttpContext.Current.Request.Url.Segments' die richtigen Werte zurück? –

+0

@StephenMuecke es funktioniert, danke – Imad

Antwort

1

Die Request.Url Eigenschaft von Controller gibt ein Uri Objekt zurück Details der aktuellen URL, einschließlich der Segmente.

string[] segments = Request.Url.Segments; 
// returns ["/", "Person/", "Detail"] 

string value = segments[1].Remove(segments[1].Length - 1);; 
// returns "Person" 
0

Sie Controller-Namen durch folgenden Code erhalten können

HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString(); 

Wenn Sie in einer Ansicht sind, dann können Sie tun:

ViewContext.RouteData.Values["Controller"] 

und für benutzerdefinierte URL können Sie festlegen,

[Route("myApp/Person/{action?}")] 
    public ActionResult View(string id) 
    { 
     if (!String.IsNullOrEmpty(id)) 
     { 
      return View("ViewStudent", GetStudent(id)); 
     } 
     return View("AllStudents", GetStudents()); 
    } 
+0

OP will nicht den Namen des Controllers - sie wollen das erste Segment der URL (d. H. "Person"). Und du antwortest genau was OP schon versucht hat! –

Verwandte Themen