2009-04-21 15 views
2

Wie bekomme ich den Pfad eines Controllers? Zum Beispiel kann ich den Pfad eines Htmlhelper wie diese:Controller-Pfad in ASP.NET-MVC

private static string GetVirtualPath(HtmlHelper htmlhelper) 
    { 
     string virtualPath = null; 
     TemplateControl tc = htmlhelper.ViewDataContainer as TemplateControl; 

     if (tc != null) 
     { 
      virtualPath = tc.AppRelativeVirtualPath; 
     } 

     return virtualPath; 
    } 

Antwort

1

Die Methode, die Sie dort haben den relativen aspx Dateinamen für eine Ansicht zurückzukehren - das ist nicht wirklich der Ort eines Htmlhelper.

Wenn Sie sagen, Sie wollen den Weg eines Controllers, was meinen Sie eigentlich? Ihr Controller ist eine Klasse, die irgendwo in einer Assembly kompiliert wird. Möchten Sie den Speicherort der Quell-CS-Datei für den Controller abrufen? Oder etwas anderes?

5

Bearbeiten: Im Folgenden wird der Pfad zur Baugruppe mit dem Controller und der Typname der Klasse mit der Controlleraktion angegeben. Vielleicht gibt dir eine Kombination von diesen das, wonach du suchst, Aaron?

string assemblyPath = Assembly.GetExecutingAssembly().CodeBase; 
string typeName = this.GetType().FullName; 

Sie liefern zum Beispiel so etwas wie

file:///C:/Projects/TestApp/TestApp.UI/bin/TestApp.UI.DLL 
TestApp.UI.Controllers.TestController 

Sofern Sie den Controller in den ‚Standard‘ ASP.NET MVC Wege platzieren und benennen, eine bestimmte Kombination der oben könnten Sie geben der richtige vollständige Pfad zur C# Datei:

C:/Projects/TestApp/TestApp.UI/Controllers/TestController.cs 

oder den relativen Pfad:

Controllers/TestController.cs 

Im Folgenden wird die Route zum Controller-Aktion geben:

1) string path = Request.Url.AbsolutePath 

2) string appPath = Request.ApplicationPath; 
    string absPath = Request.Url.AbsolutePath; 
    string path = appPath.Length <= 1 ? 
     absPath : absPath.Replace(appPath, ""); 

Beispiel für den Antrag auf eine Index Aktion der Testcontroller (http://localhost:50027/Test/Index): Die oben genannten Erträge

1) /Test/Index 
2) /Test/Index 

Für eine Website mit Basis-URL bei http://localhost:50027/blog, Beispiel für die Anforderung einer TestController-Index-Aktion (http://localhost:50027/blog/Test/Index): Das obige gibt

zurück
1) /blog/Test/Index 
2) /Test/Index 
0

können Sie den Namen des Controllers erhalten wie diese

Url.RequestContext.RouteData.Values["controller"] 

nach dem controller bekommen können Sie den Pfad mit der Methode lösen

ResolveClientUrl("~/<ControllerName>") 
+0

Sie sollten solche URLs nicht manuell erstellen ... setzen Sie es über Routing mit RouteTable.Routes, wenn Sie müssen. –

0

Aaron, es klingt wie du bist Ich schreibe eine Quine, heh, aber ich nehme an, das ist für irgendeinen Unit Testgerüst oder sowas? Vielleicht möchten Sie wirklich ein Build-Skript für etwas von dem, was Sie tun, verwenden? Sie könnten einige Befehle auf der Eigenschaftsseite des Projekts einfügen, die beim Erstellen einige Prozesse in Ihrem Controller-Verzeichnis ausführen? Entschuldigung, wenn dies nicht das ist, was Sie versuchen zu tun.