Problema javascript con asp.net 2.0

martedì 19 dicembre 2006 - 01.00

Giovanni_3478 Profilo | Senior Member

Ciao

Ho un problema con javascript e asp.net 2.0

Questo problema lo incontro quando
a del codice a cui associo funzioni javascript
aggiungo la proprietà runat=server
(esempio:
scrivendo
<td id="td1" onmouseover="display('div_neutro', 'div1', 'div2','div3','div4','div5','Lnk_home', 'td1')" onmouseout="style_onmouseOut('Lnk_home')"><a id="Lnk_home" runat="server" class="lnk_menuOver_firstItem">Home</a></td>

ho problemi;

togliendo invece la proprietà runat=server non ce li ho più
ma mi precludo le funzionalità che dà quella proprietà)



Il caso specifico è questo:
ho una pagina miapagina.aspx
e un template Hover_menu_orizontal_withoutSubLevel.ascx.

Nel code-behind di miapagina.aspx
ho scritto:
Dim Hover_menu_orizontal_withoutSubLevel = LoadControl("..\templates\Hover_menu_orizontal_withoutSubLevel.ascx")
PlaceHolder4.Controls.Add(Hover_menu_orizontal_withoutSubLevel.ascx)

In hover_menu.ascx c'è questo codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

con l'attributo runat=server gli eventi onmouseover e onmouseout mi danno errori,
senza l'attributo runat=server non mi danno errori.
Come mai?

freeteo Profilo | Guru

ciao,
il problema sta nel fatto che mettere un tag lato server vuol dire che l'html generato è quello di asp.net, che per i tag html normali li renderizza come stanno, mentre per gli oggetti asp (quelli che cominciano con "<asp:" per intenderci) viene generato l'html corrispondente.
In parole povere il tag runat="server" viene elaborato dal runtime di asp.net e generato l'html corrispondente per darlo in pasto al browser (che appunto conosce solo html e js).

Per gestire questo, quando renderizza la pagina, il runtime cambia gli id dei controlli a piacimento, perche' tanto verranno gestiti lato server e quindi con i nomi che ti trovi nell'intellisense.

Questo si capisce meglio quando hai un repeater, dove definisci degli oggetti lato server e poi lui li renderizza sul browser in automatico, qui se non cambiasse i nomi sarebbe il disastro perche' avresti piu' controlli con lo stesso nome e quindi non piu' identificabili, nonche' un HTML non corretto.

Tante parole per darti una pagina di soluzione che avevo postato tempo fa anche nel mio blog:
http://blogs.dotnethell.it/freeteo/Post_7505.aspx

la pagina di esempio per farti capire cosa puoi fare per accedere da javascript al controllo che ti interessa:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

come vedi il trucchetto sta proprio nell'utilizzare un codice asp.net (quidi lato server) dentro a del codice javascript, in particolare il punto:
("<%= divserver.ClientID %>");

insieme ti trovi il duale lato client che ovviamente funziona come ti aspetti, ma pero' da codice c# o vb.net non riesci ad accederci giustamente...
Prova a darci un'occhiata

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Ho applicato quanto scritto: funziona.

Ecco perchè a volte funzionava e a volte no con il runat=server:
...perchè a volte veniva cambiato l'id a volte no

non ci avevo proprio pensato.


Pongo un'altra domanda:
qual'è un buon editor javascript?

Tra quelli che ho provato il migliore mi sembra Aptana (che è in ambiente Eclipse);
vorrei provare anche JSEclipse ma non riesco ad installarlo.

freeteo Profilo | Guru

aptana piace anche a me, e quelle poche volte che l'ho usato mi sono sempre trovato bene.
Altrimenti ti devi accontentare di fare tante prove con visual studio...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5