2016-01-28 38 views
7

sto usando, <base href="http://localhost:80/"> nella mia pagina master per l'URL di base,asp DropDownList postback non funziona nel pannello di aggiornamento quando si utilizza <base> url nella masterpage

ora quando sto usando dropdownlist controllo sulla pagina di contenuti (che si trova in localhost:80/directory1/directory2) entro pannello di aggiornamento, evento selectedindexchanged non funziona.

ho cercato di capire, ma in scheda di rete di firefox console ho trovato che la richiesta è alla ricerca per la pagina di contenuti alla base url solo che è a localhost:80/contenpage.aspx invece di localhost:80/directory1/directory2/contenpage.aspx e dando errore

La risorsa non può essere trovato.

+0

hai impostato l'autopostback su true? –

+0

sì, l'ho fatto e se commento quel tag base in masterpage tutto funziona bene –

+0

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

risposta

2

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.

1

se si dispone di alcuni componenti asp con Autopostback = "true" e ClientIdMode = "Statico", è necessario utilizzare il triger!

come questo:

<asp:UpdatePanel ID="upPrinceOffuce" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="myCustomDropdown" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:DropDownList ID="myCustomDropdown" runat="server" ClientIDMode="Static" AutoPostBack="true" 
</asp:DropDownList> 
    </ContentTemplate> 
</asp:UpdatePanel> 
1

Prova specifiing URL assoluto in forma di action.