La circostanza rilevante è che l'azione modulo è impostato su un URL relativo in ASP.NET per impostazione predefinita:
<form id="ctl01" action="./webform1" method="post">
<!-- ... -->
</form>
Se si utilizza il tag base
, si modifica il percorso di base che la pagina utilizza per interpretare URL relativi. Nel tuo caso, l'URL base
punta a un percorso che ovviamente non è in grado di servire le pagine dell'applicazione. Per risolvere questo problema, riconsidererei se il tag base
è necessario. Se lo è, dovrebbe puntare a un URL che sia in grado di servire le pagine dell'applicazione. Per impostare il percorso base
al percorso di base dell'applicazione in modo dinamico, è possibile utilizzare il seguente codice:
protected void Page_Load(object sender, EventArgs e)
{
baseCtrl.Attributes["href"] = new Uri(Request.Url, "/").OriginalString;
}
Come un work-around, se è necessario mantenere il tag base
così com'è, ho anche cercato di impostare l'azione da form
un URL assoluto, integrando il seguente codice nella pagina master:
protected void Page_Load(object sender, EventArgs e)
{
Page.Form.Action = Request.Url.OriginalString;
}
Questo ha funzionato nel mio piccolo campione in modo che la pagina potrebbe eseguire il postback con successo. Anche se il modulo viene postato nella stessa posizione come se non ci fosse il tag base
, potrebbero esserci alcuni effetti collaterali perché altre risorse sulla pagina (es. CSS, file JavaScript e simili) potrebbero anche essere referenziate con un URL relativo e quindi essere recuperato da un'altra posizione. Pertanto, proporrei ancora di rivalutare il tag base
prima di ricorrere a questa soluzione.
hai impostato l'autopostback su true? –
sì, l'ho fatto e se commento quel tag base in masterpage tutto funziona bene –
http://stackoverflow.com/questions/11521011/why-base-tag-does-not-work-for-relative-paths ___ per favore controlla se il post di cui sopra funziona. Sembra che abbia qualcosa a che fare con il percorso assoluto e il percorso relativo – user2846413