Domanda

sul nostro sito eseguiamo la riscrittura degli URL per generare enormi quantità di pagine generate dal database. su ogni pagina è presente un controllo di accesso per gli utenti. in questo modo:

Pagina aspx interna: /DB.aspx?id=123 URL visibile dell'utente: /ABC/123.aspx, /ABC/456.aspx ... (url riscritto)

sfortunatamente, il tag su ogni pagina ha un attributo action di " DB.aspx? id = 123 " ;. quando l'utente fa clic sul pulsante il browser pubblica su /ABC/DB.aspx?id=123 che ovviamente non esiste.

soluzioni che ho provato: 1. modifica l'attributo action eseguendo la sottoclasse di HtmlForm. questo distrugge tutte le altre forme sul sito. 2. rimuovere l'attributo action (in modo che il browser invii sempre allo stesso URL). funziona sulle pagine riscritte ma su " / " (il default.aspx nella directory principale) ricevo un messaggio che il post verb non è consentito su " / " (iis 6 e non ho alcun controllo sui mapping)

qualcuno?

È stato utile?

Soluzione

Dai un'occhiata a questo post sul blog davvero carino di scott gu, http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx .

" In particolare, è possibile sfruttare la nuova architettura di estensibilità dell'adattatore di controllo ASP.NET 2.0 per personalizzare il rendering del controllo e sovrascrivere la sua "azione". valore dell'attributo con un valore fornito. Ciò non richiede di modificare alcun codice nelle pagine aspx "

Controlla la sezione: "Gestione dei PostBack ASP.NET con la riscrittura degli URL", ho usato l'adattatore che ha pubblicato correttamente.

Ps. tieni presente che ci sono alcuni problemi su asp.net quando usi la riscrittura dell'URL quando usi una sessione senza cucina e l'URL riscritto è più profondo della pagina originale, proprio come quello che hai. (/ abc / apage vs. / db?). Il problema è proprio nel codice sorgente del framework, ci sono soluzioni alternative ma questo è un argomento intero (con compromessi :( ... potresti volere averli allo stesso livello).

Altri suggerimenti

Forse la semantica, ma l'attributo action = " DB.aspx? id = 123 " o " /DB.aspx? id = 123 " ;? Supponendo che la riscrittura dell'URL consenta il passaggio a pagine fisiche, questo potrebbe essere il tuo problema.

Non l'ho mai fatto, ma ho visto il codice usando Reflector e immagino che tu possa risolverlo in questo modo:

Nella pagina:

this.Form.Action = null;

o

this.Form.SetAttribute("action", null);

Se non funziona, basta impostare il percorso desiderato:

this.Form.SetAttribute (" action " ;, " ABC / 123.aspx ");

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