2009-04-06 12 views
5

Sto utilizzando System.Web.Routing per avere URL migliori e ho riscontrato un problema. Devo conoscere la pagina effettiva che gestisce la richiesta.Asp.Net System.Web.Routing Trova attuale .aspx Pagina

per esempio arriva una richiesta come:

/basketball/home 

ho bisogno di trovare la pagina che gestisce tale richiesta, come:

/management/default.aspx 

sto usando solo lo System.Web.Routing e non MVC. Ho un handle per RequestContext che contiene alcune informazioni sul percorso, ma non vedo quello che mi serve.

Grazie in anticipo.

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

ero in grado di utilizzare Context.CurrentHandler che mi danno "ASP.management_default_aspx", non esattamente la pagina, ma abbastanza per ottenere il nome della pagina.

risposta

-1

Sono stato in grado di utilizzare Context.CurrentHandler che mi dà "ASP.management_default_aspx", non esattamente la pagina ma abbastanza per ottenere il nome della pagina.

2

Non è possibile recuperarlo dall'attuale oggetto HttpContext?

Forse qualcosa di simile:

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:
Hai provato questo articolo?

How to: Construct a URL from a Route

Si dovrebbe essere in grado di recuperarla indietro dalla tabella di routing che hai costruito.

+0

Questo non funziona perché System.Web.HttpContext.Current.Request.Url.AbsolutePath mi dà/basketball/home, che non esiste realmente. –

+0

Ho provato a trovarlo utilizzando la tabella di routing, ma non ci sono membri pubblici o accessor per il gestore. L'articolo sulla costruzione di un URL da una rotta fornisce solo l'URL, che sarebbe "/ basketball/home" e non la pagina di aspx. –

+0

provando un'altra cosa descritta in quell'articolo. –

3

V'è in realtà un altro modo semplice per ottenere la pagina attuale:

String vPath = ((System.Web.Routing.PageRouteHandler)Page.RouteData.RouteHandler).VirtualPath
Non dimenticare di controllare Page.RouteData.RouteHandler non è nullo - mentre si stanno ottenendo pagina w/o ASP.Net di routing ma direttamente

0

Prova ad usare questo codice:

Page.AppRelativeVirtualPath 
+1

Questa soluzione funziona !!! –

1

vhinn risposta di terribile lavorato ...

Page.AppRelativeVirtualPath 

Basta rimuovere la tilde iniziale ("~"), e si è pronti a partire.

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

Non so perché è stato downvoted. Ha funzionato per me come un fascino.

+1

Mi piace questa soluzione perché funziona anche in pagine non indirizzate. (testato su webforms asp.net 4.0) –

Problemi correlati