194 messaggi dal 05 giugno 2004
Salve a tutti, dopo innumerevoli tentativi sono riuscito a costruire un controllo server personalizzato che sfrutta le potenzialità di Ajax, il controllo deriva dalla classe WebControl e implementa l'interfaccia IScriptControl.

Sto tentando di fare la stessa cosa derivando dalla classe Control per non implementare tutta una serie di proprietà che non mi servono.

Non riesco a trovare documentazione soddisfacente in merito, qualcuno sa dirmi se si può fare?

Grazie a tutti, ciao.
gboesso wrote:
Non riesco a trovare documentazione soddisfacente in merito, qualcuno sa dirmi se si può fare?

qual è esattamente il problema? se scegli di derivare da Control hai un po' di cose in meno, ma niente che tu non possa aggiungere eventualmente. dovresti spiegare meglio cosa ti blocca o che dubbi hai, perchè altrimenti così la risposta potrebbe essere 2-3 libri da un migliaio di pagine l'uno...

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
194 messaggi dal 05 giugno 2004
Allora, ti spiego brevemente cosa fa il custom control:

il controllo renderizza un pulsantino, che sull'evento onClick lancia tutto il "casino" Ajax che ritorna all'interno di un alert JavaScript una proprietà "message" che è il risultato di un'interrogazione a database.

Se derivo la classe da WebControl e implemeneto l'interfaccia IScriptControl il meccanismo funziona.
Se derivo la classe da Control e implemento l'interfaccia IscriptControl ho il seguente errore:

"Errore di run-time di Microsoft JScript: Sys.ArgumentException: Value must not be null for Controls and Behaviors.
Parameter name: element"

Ho provato anche ad aggiungere l'interfaccia INamingContainer e ad usare l'evento CreateChildControls ma mi da sempre lo stesso errore.
gboesso wrote:
Ho provato anche ad aggiungere l'interfaccia INamingContainer e ad usare l'evento CreateChildControls ma mi da sempre lo stesso errore.

WebControl aggiunge un tag intorno, di default span, ed un ID, che se non emetti in qualche modo tu, Control non provvede ad aggiungere. io ti direi di usare WebControl per evitarti tutta una serie di problemi, ma nel caso tu optassi per Control, quello che devi fare più o meno è fare l'override di Render, quindi metterci una roba tipo questa:

writer.Write("<span id=\"");
writer.Write(UniqueID);
writer.Write("\">");
base.Render(writer);
writer.Write("</span>");

puoi ovviamente usare anche un div se preferisci che il contenitore sia di tipo block, piuttosto che p o qualsiasi altro tag.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
194 messaggi dal 05 giugno 2004
Funziona , il tuo consiglio è stato prezioso.

Se mi permetti, vorrei aprofittare per avere ulteriori chiarimenti sui possibili problemi dell'utilizzo della classe "Control" nelle pagine web.

Il pulsante che ho sviluppato si propone come pulsante cross browser con necessità minime, in particolare utilizza dei file di risorse interni al controllo stesso: ovviamente un file .js, un'immagine e un file .css, non necessita di viewstate.

Visto che comunque poi andrà inserito in applicazioni professionali vorrei sapere da te se è meglio appesantire l'applicazione usanto la classe WebControl per evitare problemi o se è possibile snellirla usanto la classe Control con i dovuti accorgimenti.

Ti vorrei porre anche un'altro questito di carattere generale: visto che il controllo interroga un DB, ci sono problemi di sicurezza interrogando il DB all'interno della logica Ajax?

Grazie mille, ciao.
gboesso wrote:
Visto che comunque poi andrà inserito in applicazioni professionali vorrei sapere da te se è meglio appesantire l'applicazione usanto la classe WebControl per evitare problemi o se è possibile snellirla usanto la classe Control con i dovuti accorgimenti.

non cambia nulla dal punto di vista della "pesantezza", quanto del fatto che ereditando da WebControl ti porti dietro un po' di cose (stili sopratutto) che altrimenti devi implementare a mano.

Ti vorrei porre anche un'altro questito di carattere generale: visto che il controllo interroga un DB, ci sono problemi di sicurezza interrogando il DB all'interno della logica Ajax?

sì, devi fare attenzione che non consenta di fare chiamate in modo "insicuro". il tipico esempio è un url che accetta come parametro uno username: è tecnicamente errato e porta a poter passare uno username arbitrario entrando in possesso di dati di un altro utente. in questi scenari bisogna inventarsi qualcosa di diverso, come ad esempio uno scambio di questi dati tra parte server e "client" usando dei cookie, meglio ancora se criptati.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.