2010-06-09 17 views
8

Abbiamo appena aggiornato la nostra applicazione da ASP.Net 2.0 ad ASP.Net 4.0.Qual è l'impostazione corretta di ClientIDMode in ASP.Net 4 per ottenere il rendering di ASP.Net 2.0.

Abbiamo incluso nel web.config nell'elemento <system.web>:

<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> 

mia comprensione è che questo dovrebbe rendere i controlli lo stesso di Net 2.0/3.5 sarebbe.

Tuttavia ... non è ... qui è un esempio

Questo è reso in 2.0:

<input id="grdUserEntity__ctl1_chkSelectAll" type="checkbox" 
    name="grdUserEntity:_ctl1:chkSelectAll" onclick="javascript:iSelectAll();" /> 

Questo è in 4.0:

<input id="grdUserEntity_ctl01_chkSelectAll" type="checkbox" 
    name="grdUserEntity$ctl01$chkSelectAll" onclick="javascript:iSelectAll();" /> 

La differenza:

2.0 id=grdUserEntity__ctl1_chkSelectAll 
4.0 id=grdUserEntity_ctl01_chkSelectAll 

Secondo a ciò che leggo quell'impostazione di configurazione farà sì che ASP.Net 4.0 esegua il rendering dei controlli server e dell'ID client in modo identico alla versione precedente.

Cosa stiamo sbagliando?

risposta

12

C'è stato un cambiamento nel modo in cui gli ID sono stati resi da ASP.NET 2.0 a ASP.NET 3.5. Dal momento che stai passando dalla 2.0 alla 4.0, stai ancora vedendo questa differenza. Il cambiamento è dovuto ai miglioramenti della conformità XHTML.

Si può provare a tornare al rendering 2.0 con l'impostazione compat xhtmlCompliance. Ancora un'altra impostazione di compat, sì :) Dovrebbe funzionare, ma onestamente, non sono sicuro di quanto sia stato testato quella vecchia impostazione di compat in 4.0, e so che non sarebbe compatibile con UpdatePanel, se avessi intenzione di usare quella.

C'è un motivo per cui vuoi mantenere il rendering 2.0? Solo la paura delle regressioni o hai delle regressioni reali conosciute?

impostazione XHTML: http://msdn.microsoft.com/en-us/library/ms178159.aspx

+2

Abbiamo javascript basato sul modo in cui rende il rendering 2.0. Quindi, sì, abbiamo diversi problemi di regressione ora. – PilotBob

+0

Sì ... questo risolve la regressione. Grazie mille. – PilotBob

+0

Ottimo! Buono a sapersi. – InfinitiesLoop

1

Per i futuri lettori di questo post, è possibile attenuare i problemi di compatibilità utilizzando il costrutto <%=objectid.ClientId %> nella pagina ASP.NET.

Esempio: si supponga casella di testo chiamata txtInput (che ASP.NET esegue come id = ctl00_cphMainContent_txtInput) che è necessario fare riferimento in un codice javascript sul lato client. Si potrebbe fare riferimento l'oggetto con il seguente codice javascript nella pagina ASP.NET:

str txtInputObjNm = "<%=txtInput.ClientId %>"; 

In fase di esecuzione, sarà tradotto automaticamente nelle seguenti JavaScript lato client:

str txtInputObjNm = "ctl00_cphMainContent_txtInput"; 

Se .NET "decide" di cambiare il modo in cui viene assegnato il clientid, il codice continuerà a funzionare.

+5

presumiamo ovviamente che tu abbia messo il tuo javascript in linea sul modulo web. Preferiamo usare javascript discreto e non farlo. – PilotBob

1

In un'applicazione 4.0 pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" si confonderà completamente lo stile nella pagina Site.master. Ad esempio, i menu saranno quasi invisibili nel designer e perderanno completamente il loro stile nel browser. Fondamentalmente, lo styling andrà perso nel designer.

Ho trovato questo impostando il framework di destinazione da 4.0 a 3.5 e ritorno a 4.0. Dopo questo, lo stile è stato contorto. Dopo aver confrontato tutti i file con una buona app, ho finalmente trovato questa riga in web.config. L'ho rimosso e i miei problemi di stile sono scomparsi.