Domanda

Ho un'applicazione ASP.NET originariamente distribuito a un Net 1.1 Framework sul server di Windows 2000 che Ora sto utilizzando in un Windows 2008 Server utilizzando 2.0.50727. Usiamo la tilde (~) per risolvere ad un percorso assoluto in molte aree dell'applicazione e funziona per cose come asp: controlli hyperlink (con run-in tag di server), ma per i nostri controlli DataGrid associato che utilizzano HyperLinkColumns per creare collegamenti basati su valori ID tornati dalla nostra banca dati, la tilde è sempre scritti nella pagina.

Il codice:

HyperLinkColumn oLink = new HyperLinkColumn();
oLink.DataNavigateUrlField = "IdField";
oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

di dumping questo alla pagina:

<a href="~/Here171201.aspx">

Che cosa è cambiato tra le versioni di IIS o .NET Framework potrebbe essere la causa di questa funzionalità per lavorare non è più? La Tilde è stata definitivamente risolvendo in 1.1 - Ho lo stesso codice esatto distribuito su una dozzina di 1.1 server Framework nella nostra organizzazione. Purtroppo, la classe che imposta la DataNavigateUrlFormatString non ha accesso alla pagina, quindi dovrò fare un po 'kludging per inserire il lavoro Page.ResolveUrl intorno ...

È stato utile?

Soluzione

Io non sono a conoscenza di nulla cambia, ma io non uso HyperLinkColumns (io preferisco il controllo che la colonna Modello fornisce) e quindi non ho guardato per eventuali modifiche.

Una possibilità come un cerotto proverbiale è quello di cambiare questa linea:

oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

a questo:

oLink.DataNavigateUrlFormatString = Page.ResolveUrl("~/Here{0}.aspx"); 

Se la memoria non serve ci fosse qualche problema quando si va a pagine master e utilizzando il '~' da controlli utente, ma è stato un po 'da quando ho letto niente del genere.

Altri suggerimenti

Non credo che il HyperlinkColumn di un DataGrid risolve automaticamente l'URL in un percorso assoluto. IIRC, la proprietà DataNavigateUrlFormatString chiama internamente String.Format() solo sul formato fornito. Sei sicuro che questo ha funzionato correttamente su .NET 1.1? IIRC, .NET 1.1 non ha avuto risoluzione URL automatico tilde-based.

A mio parere, è necessario utilizzare la soluzione presentata da Stephen (Page.ResolveUrl chiamata manualmente.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top