2009-04-06 10 views
5

Ich verwende System.Web.Routing, um einige bessere URLs zu haben und auf ein Problem gestoßen. Ich muss die tatsächliche Seite kennen, die die Anfrage bearbeitet.Asp.Net System.Web.Routing Finden Sie tatsächliche .aspx Seite

zum Beispiel kommt eine Anfrage als:

/basketball/home 

Ich brauche die Seite zu finden, der diese Anforderung verarbeitet, wie:

/management/default.aspx 

Ich bin nur das System.Web.Routing mit und nicht MVC. Ich habe ein Handle mit dem RequestContext, der einige der Routeninformationen enthält, aber ich sehe nicht, was ich brauche.

Vielen Dank im Voraus.

******* UPDATE *******

konnte ich Context.CurrentHandler verwenden, die mir geben "ASP.management_default_aspx", nicht genau die Seite aber genug um den Seitennamen zu erhalten.

Antwort

-1

Ich konnte Context.CurrentHandler verwenden, die mir "ASP.management_default_aspx" geben, nicht genau die Seite, aber genug, um den Seitennamen zu erhalten.

2

Können Sie das nicht vom aktuellen HttpContext-Objekt abrufen?

Vielleicht so etwas wie dieses:

public string GetCurrentPageName() 
{ 
    string sPath = System.Web.HttpContext.Current.Request.Url.AbsolutePath; 
    System.IO.FileInfo oInfo = new System.IO.FileInfo(sPath); 
    string sRet = oInfo.Name; 
    return sRet; 
} 

UPDATE:
Hast Du diesen Artikel versucht?

How to: Construct a URL from a Route

sollten Sie in der Lage sein, es aus der Tabelle Routing zurück zu holen Sie aufgebaut haben.

+0

Dies funktioniert nicht, da System.Web.HttpContext.Current.Request.Url.AbsolutePath mir/basketball/home gibt, die nicht wirklich existiert. –

+0

Ich habe versucht, es mithilfe der Routing-Tabelle zu finden, aber es gibt kein öffentliches Mitglied oder Accessor für den Handler. Dieser Artikel zum Erstellen einer URL aus einer Route gibt nur die URL an, die "/ basketball/home" und nicht die aspx-Seite wäre. –

+0

versucht noch eine Sache in diesem Artikel beschrieben. –

3

Es ist eigentlich eine weitere einfache Möglichkeit, die aktuelle Seite zu erhalten:

String vPath = ((System.Web.Routing.PageRouteHandler)Page.RouteData.RouteHandler).VirtualPath
Vergessen Sie nicht, Page.RouteData.RouteHandler ist nicht null zu überprüfen -, während Sie die Seite w/o ASP.Net Routing bekommen aber direkt.

0

Versuchen Sie diesen Code verwenden:

Page.AppRelativeVirtualPath 
+1

Diese Lösung funktioniert !!! –

1

vhinn schreckliche Antwort arbeitete ...

Page.AppRelativeVirtualPath 

Sie müssen nur die anfängliche Tilde entfernen ("~"), und Sie sind bereit zu gehen.

var path = Page.AppRelativeVirtualPath.Replace("~", String.Empty); 

Ich weiß nicht, warum es downvoted wurde. Arbeitete für mich wie ein Zauber.

+1

Ich mag diese Lösung, weil es auch in nicht gerouteten Seiten funktioniert. (getestet auf Webforms asp.net 4.0) –