<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><channel><title>PeppeDotNet Blog - Category: ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/Categoria/ASP.NET_2.0/</link><description>Marchi Giuseppe personal blog</description><dc:language>it-it</dc:language><pubDate>Fri, 22 Oct 2004 00:00:00 GMT</pubDate><lastBuildDate>Sat, 18 May 2013 22:21:54 GMT</lastBuildDate><webMaster>info@peppedotnet.it (Giuseppe Marchi)</webMaster><managingEditor>info@peppedotnet.it (Giuseppe Marchi)</managingEditor><copyright>PeppeDotNet 2004/06</copyright><generator>dotRss 0.9.3.28434 Beta2 - http://www.peppedotnet.it/Projects/dotRSS.aspx</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><category>.NET and Sharepoint programming</category><ttl>60</ttl><image><title>PeppeDotNet</title><url>http://www.peppedotnet.it/img/logo.gif</url><link>http://www.peppedotnet.it/Blog</link><width>144</width><height>30</height><description>PeppeDotNet.it</description></image><item><title>Applicazioni ASP.NET a 3 livelli - Parte 2</title><link>http://www.peppedotnet.it/Blog/3TierASPNETWebApplicationPart2.aspx</link><pubDate>Wed, 05 Dec 2007 09:29:18 GMT</pubDate><description>Dopo la &lt;a href="http://www.peppedotnet.it/Blog/3TierASPNETWebApplication.aspx" title="Applicazioni ASP.NET a 3 livelli"&gt;prima parte&lt;/a&gt;, uscita mercoledì scorso, è visibile oggi sempre sul sito &lt;a href="http://www.html.it" title="html.it"&gt;html.it&lt;/a&gt; la seconda parte sulla costruaione di siti web in ASP.NET 2 sfruttando la tecnica di progettazione su tre livelli: Data Access layer, Business Logic layer e User Interface layer.
&lt;br /&gt;In questa seconda parte si è cercato di applicare tale tecnica di sviluppo per la costruzione di un semplice blog.
&lt;br /&gt;Vi lascio il link:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2449/applicazioni-a-3-livelli-con-aspnet/3/" title="Applicazioni a 3 livelli con ASP.NET - Parte 2"&gt;http://aspnet.html.it/articoli/leggi/2449/applicazioni-a-3-livelli-con-aspnet/3/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Buona lettura !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Domain Model.aspx" title="TAG: Domain Model"&gt;Domain Model&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/3TierASPNETWebApplicationPart2.aspx#comm</comments><guid>/Blog/3TierASPNETWebApplicationPart2.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/282.aspx</trackback:ping></item><item><title>Applicazioni ASP.NET a 3 livelli</title><link>http://www.peppedotnet.it/Blog/3TierASPNETWebApplication.aspx</link><pubDate>Wed, 28 Nov 2007 23:22:08 GMT</pubDate><description>E' uscito oggi su &lt;a href="http://www.html.it" title="html.it"&gt;html.it&lt;/a&gt; il primo di una mini-serie di due articoli sullo sviluppo di applicazioni a 3 livelli con ASP.NET 2. Lo sviluppo di applicazioni web basate su questo modello logico di programmazione risulta veramente facile ed ottimale per i propri siti web, poichè divide la logica di presentazione da quella di gestione dei dati di business e da quella di accesso alla base di dati sottostante.
&lt;br /&gt;Il tutto fondato sul concetto di "Domain Model", l'insieme di classi che rappresentano le entità coinvolte all'interno dell'applicazione e i vari comportamenti.
&lt;br /&gt;Questo il link dell'articolo:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2449/applicazioni-a-3-livelli-con-aspnet/" title="Applicazioni a 3 livelli con ASP.NET"&gt;http://aspnet.html.it/articoli/leggi/2449/applicazioni-a-3-livelli-con-aspnet/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Nella seconda parte, vedremo invece come creare un semplice blog basato proprio su questa tecnica di sviluppo.
&lt;br /&gt;Il mio consiglio, come sempre, è quello di leggerlo !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Domain Model.aspx" title="TAG: Domain Model"&gt;Domain Model&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/3TierASPNETWebApplication.aspx#comm</comments><guid>/Blog/3TierASPNETWebApplication.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/280.aspx</trackback:ping></item><item><title>Data Bound Controls personalizzati con ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/ASPNET2DataBoundControls.aspx</link><pubDate>Wed, 24 Oct 2007 16:33:43 GMT</pubDate><description>Dopo aver parlato di politica, ritorniamo nel nostro mondo. E' uscito oggi il sesto ed ultimo articolo della serie sui controlli lato server di ASP.NET 2.0 su &lt;a href="http://www.html.it" title="HTML.it"&gt;HTML.it&lt;/a&gt;; l'argomento di questa uscita sono i controlli Data-Bound.
&lt;br /&gt;Si vedrà quindi una panoramica su tale famiglia di controlli e, in seguito, si vedrà come creare un controllo per il rendering di un grafico a barre, collegabile a diversi tipi di datasource.
&lt;br /&gt;
&lt;br /&gt;Con questo articolo, finisce la serie legata allo sviluppo dei controlli web custom. Spero vi sia utile.
&lt;br /&gt;Ecco qui il riepilogo delle parti fin'ora pubblicate:
&lt;br /&gt;
&lt;br /&gt;Parte 1 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/" title="I controlli lato server di ASP.NET 2.0 (Parte 1)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/&lt;/a&gt;
&lt;br /&gt;Parte 2 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/" title="I controlli lato server di ASP.NET 2.0 (Parte 2)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/&lt;/a&gt;
&lt;br /&gt;Parte 3 - &lt;a href="http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/" title="Controlli compositi personalizzati con ASP.NET 2.0 (Parte 3)"&gt;http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/&lt;/a&gt;
&lt;br /&gt;Parte 4 - &lt;a href="http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/" title="Supporto desing-time dei controlli ASP.NET (Parte 4)"&gt;http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/&lt;/a&gt;
&lt;br /&gt;Parte 5 - &lt;a href="http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/6/" title="Convertitori di tipi ed editor di tipi (Parte 5)"&gt;http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/6/&lt;/a&gt;
&lt;br /&gt;Parte 6 - &lt;a href="http://aspnet.html.it/articoli/leggi/2419/data-bound-controls-personalizzati-con-aspnet-20" title="Data Bound Controls personalizzati con ASP.NET 2.0"&gt;http://aspnet.html.it/articoli/leggi/2419/data-bound-controls-personalizzati-con-aspnet-20&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Server Controls.aspx" title="TAG: Server Controls"&gt;Server Controls&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Web Controls.aspx" title="TAG: Web Controls"&gt;Web Controls&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNET2DataBoundControls.aspx#comm</comments><guid>/Blog/ASPNET2DataBoundControls.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/271.aspx</trackback:ping></item><item><title>Supporto alla fase di desing-time per i controlli ASP.NET - Convertitori di tipo e Editor di tipi</title><link>http://www.peppedotnet.it/Blog/ASPNETControlsDesignTimeSupportTypeConvertersAndTypeEditors.aspx</link><pubDate>Fri, 19 Oct 2007 12:13:20 GMT</pubDate><description>Mercoledì scorso è uscito il quinto articolo sui controlli lato server di ASP.NET 2.0 su HTML.IT; questa è la seconda parte riguardo lo sviluppo del supporto per la fase di design-time dei nostri controlli web personalizzati. In questo articolo sono state presentate le tecniche con cui realizzare dei convertitori di tipo per tipi personalizzati e degli editor di tipi.
&lt;br /&gt;Gli esempi sono molto chiari a mio parere, e spiegano molto bene le possibilità che abbiamo per rendere i nostri controlli custom veramente completi.
&lt;br /&gt;Ecco qui il riepilogo delle parti fin'ora pubblicate:
&lt;br /&gt;
&lt;br /&gt;Parte 1 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/" title="I controlli lato server di ASP.NET 2.0 (Parte 1)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/&lt;/a&gt;
&lt;br /&gt;Parte 2 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/" title="I controlli lato server di ASP.NET 2.0 (Parte 2)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/&lt;/a&gt;
&lt;br /&gt;Parte 3 - &lt;a href="http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/" title="Controlli compositi personalizzati con ASP.NET 2.0 (Parte 3)"&gt;http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/&lt;/a&gt;
&lt;br /&gt;Parte 4 - &lt;a href="http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/" title="Supporto desing-time dei controlli ASP.NET (Parte 4)"&gt;http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/&lt;/a&gt;
&lt;br /&gt;Parte 5 - &lt;a href="http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/6/" title="Convertitori di tipi ed editor di tipi (Parte 5)"&gt;http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/6/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Server Controls.aspx" title="TAG: Server Controls"&gt;Server Controls&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Web Controls.aspx" title="TAG: Web Controls"&gt;Web Controls&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNETControlsDesignTimeSupportTypeConvertersAndTypeEditors.aspx#comm</comments><guid>/Blog/ASPNETControlsDesignTimeSupportTypeConvertersAndTypeEditors.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/269.aspx</trackback:ping></item><item><title>Supporto alla fase di desing-time per i controlli ASP.NET</title><link>http://www.peppedotnet.it/Blog/ASPNETControlsDesignTimeSupport.aspx</link><pubDate>Wed, 10 Oct 2007 15:59:44 GMT</pubDate><description>Anche questo mercoledì, è pronto per voi un appuntamento della serie sulla creazione di controlli lato server personalizzati di ASP.NET 2.0 !
&lt;br /&gt;In questo articolo, che è stato diviso in due parti per la lunghezza degli argomenti trattati, si parlerà di come costruire il supporto per il design-time di Visual Studio .NET per i nostri controlli custom.
&lt;br /&gt;Nello specifico, in questa prima parte, dopo una panoramica sui vari attributi di progettazione (divisi in attributi di classe e attributi di proprietà), si andrà nello specifico sviluppando un control designer per il controllo di creazione di link a finestre pop-up visto nel primo articolo. A questo control designer verrà poi attaccato lo smart tag, il menu contestuale per la modifica del comportamento del controllo in fase di sviluppo visuale.
&lt;br /&gt;Questo articolo è veramente completo, a mio parere. E vi consiglio di leggerlo se avete intenzione di distribuire i vostri controlli ASP.NET custom !
&lt;br /&gt;
&lt;br /&gt;Parte 1 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/" title="I controlli lato server di ASP.NET 2.0 (Parte 1)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/&lt;/a&gt;
&lt;br /&gt;Parte 2 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/" title="I controlli lato server di ASP.NET 2.0 (Parte 2)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/&lt;/a&gt;
&lt;br /&gt;Parte 3 - &lt;a href="http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/" title="Controlli compositi personalizzati con ASP.NET 2.0 (Parte 3)"&gt;http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/&lt;/a&gt;
&lt;br /&gt;Parte 4 - &lt;a href="http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/" title="Supporto desing-time dei controlli ASP.NET (Parte 4)"&gt;http://aspnet.html.it/articoli/leggi/2401/supporto-desingtime-dei-controlli-aspnet/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Nella prossima uscita, vedremo la seconda parte di questo specifico argomento, legata alla costruzione di convertitori di tipi e di editor di tipi. Non perdetevela !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Server Controls.aspx" title="TAG: Server Controls"&gt;Server Controls&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Web Controls.aspx" title="TAG: Web Controls"&gt;Web Controls&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Desgin time.aspx" title="TAG: Desgin time"&gt;Desgin time&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNETControlsDesignTimeSupport.aspx#comm</comments><guid>/Blog/ASPNETControlsDesignTimeSupport.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/266.aspx</trackback:ping></item><item><title>Controlli compositi personalizzati con ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/CustomCompositeControls.aspx</link><pubDate>Wed, 03 Oct 2007 15:49:31 GMT</pubDate><description>Continua la serie di articoli legati ai controlli lato server su &lt;a href="http://www.html.it" title="Html.it"&gt;html.it&lt;/a&gt;; quest'oggi è stata pubblicata la parte dedicata ai &lt;a href="http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/" title="Controlli compositi personalizzati con ASP.NET 2.0"&gt;controlli compositi&lt;/a&gt;.
&lt;br /&gt;Nelle prossime uscite vedremo come implementare dei controlli di tipo Data-Bound.
&lt;br /&gt;
&lt;br /&gt;Parte 1 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/" title="I controlli lato server di ASP.NET 2.0 (Parte 1)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/&lt;/a&gt;
&lt;br /&gt;Parte 2 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/" title="I controlli lato server di ASP.NET 2.0 (Parte 2)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/&lt;/a&gt;
&lt;br /&gt;Parte 3 - &lt;a href="http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/" title="Controlli compositi personalizzati con ASP.NET 2.0"&gt;http://aspnet.html.it/articoli/leggi/2392/controlli-compositi-personalizzati-con-aspnet-20/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Server Controls.aspx" title="TAG: Server Controls"&gt;Server Controls&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Web Controls.aspx" title="TAG: Web Controls"&gt;Web Controls&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/CustomCompositeControls.aspx#comm</comments><guid>/Blog/CustomCompositeControls.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/264.aspx</trackback:ping></item><item><title>Web control per l'apertura di finestre pop-up</title><link>http://www.peppedotnet.it/Blog/PopUpLinkWebControl.aspx</link><pubDate>Wed, 12 Sep 2007 22:27:39 GMT</pubDate><description>Dopo il primo articolo, uscito &lt;a href="http://www.peppedotnet.it/Blog/ASPNETServerControls.aspx" title="I controlli lato server di ASP.NET 2.0 "&gt;mercoledì scorso&lt;/a&gt;, è stato pubblicato oggi il secondo della serie sui controlli lato server di ASP.NET 2.0, sempre su &lt;a href="http://www.html.it" title="html.it"&gt;html.it&lt;/a&gt; !
&lt;br /&gt;Questa volta si vedrà come creare un controllo web per il rendering di link per l'apertura di finestre pop-up.
&lt;br /&gt;La serie continuerà poi con una panoramica sui controlli compositi.
&lt;br /&gt;
&lt;br /&gt;Parte 1 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/" title="I controlli lato server di ASP.NET 2.0 (Parte 1)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/&lt;/a&gt;
&lt;br /&gt;Parte 2 - &lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/" title="I controlli lato server di ASP.NET 2.0 (Parte 2)"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/4/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Web Controls.aspx" title="TAG: Web Controls"&gt;Web Controls&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Server Controls.aspx" title="TAG: Server Controls"&gt;Server Controls&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/PopUpLinkWebControl.aspx#comm</comments><guid>/Blog/PopUpLinkWebControl.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/256.aspx</trackback:ping></item><item><title>I controlli lato server di ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/ASPNETServerControls.aspx</link><pubDate>Wed, 05 Sep 2007 16:23:38 GMT</pubDate><description>Eccoci qua. E' appena uscito il primo di una serie di 5 articoli sui controlli lato server di ASP.NET 2.0 su &lt;a href="http://www.html.it" title="HTML.IT"&gt;html.it&lt;/a&gt; ! 
&lt;br /&gt;Questo, si tratta di un'introduzione generale all'argomento, spiegando la differenza tra web controls e html controls per poi addentrarsi all'interno del ciclo di vita dei controlli lato server.
&lt;br /&gt;Nella seconda uscita (mercoledì prossimo) vedremo come implementare un controllo web personalizzato. In seguito verrano spiegati i controlli compositi, i controlli Data-Bound e infine lo sviluppo di controlli web con il supporto a design time su Visual Studio .NET 2005.
&lt;br /&gt;Questa volta... c'è un sacco di roba non credete ?
&lt;br /&gt;
&lt;br /&gt;Vi lascio il link dell'articolo d'introduzione:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/" title="I controlli lato server di ASP.NET 2.0"&gt;http://aspnet.html.it/articoli/leggi/2363/i-controlli-lato-server-di-aspnet-20/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Web Controls.aspx" title="TAG: Web Controls"&gt;Web Controls&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Server Controls.aspx" title="TAG: Server Controls"&gt;Server Controls&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNETServerControls.aspx#comm</comments><guid>/Blog/ASPNETServerControls.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/250.aspx</trackback:ping></item><item><title>Parametri custom per i DataSource controls</title><link>http://www.peppedotnet.it/Blog/DataSourceControlsCustomParameters.aspx</link><pubDate>Sat, 28 Jul 2007 10:51:19 GMT</pubDate><description>Dopo il &lt;a href="http://www.peppedotnet.it/Blog/CustomDataSouce.aspx" title="DataSource personalizzati"&gt;primo&lt;/a&gt; e il &lt;a href="http://www.peppedotnet.it/Blog/CustomDataSourceWithParametersSupport.aspx" title="DataSource personalizzati: supporto per i parametri"&gt;secondo&lt;/a&gt; articolo riguardo i DataSource controls, mercoledì scorso è uscito l'&lt;a href="http://aspnet.html.it/articoli/leggi/2336/parametri-custom-per-i-datasource/" title="Parametri custom per i DataSource controls"&gt;ultimo della serie&lt;/a&gt; su &lt;a href="http://www.html.it" title="HTML.it"&gt;HTML.it&lt;/a&gt;. Questa volta il contenuto è incentrato sulla costruzione di parametri custom per i controlli DataSource, sia quelli di default che quelli personalizzati.
&lt;br /&gt;Nell'esempio è presente un parametro che prende valori dalla cache della pagina. Ecco un esempio:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;pep:FeedDataSource&lt;/span&gt;&lt;span style='color:#FF0000'&gt; FeedType&lt;span style='color:#0000FF'&gt;="RSS"&lt;/span&gt; ID&lt;span style='color:#0000FF'&gt;="myFeedDataSource2"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Parameters&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;                            
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;pep:CacheParameter&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Name&lt;span style='color:#0000FF'&gt;="FeedUrl"&lt;/span&gt; Key&lt;span style='color:#0000FF'&gt;="myFeedUrl"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;Parameters&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;pep:FeedDataSource&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;Questo il link all'articolo:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2336/parametri-custom-per-i-datasource/" title="Parametri custom per i DataSource controls"&gt;http://aspnet.html.it/articoli/leggi/2336/parametri-custom-per-i-datasource/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Buona lettura !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/DataSource.aspx" title="TAG: DataSource"&gt;DataSource&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/DataSourceControlsCustomParameters.aspx#comm</comments><guid>/Blog/DataSourceControlsCustomParameters.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/247.aspx</trackback:ping></item><item><title>DataSource personalizzati: supporto per i parametri</title><link>http://www.peppedotnet.it/Blog/CustomDataSourceWithParametersSupport.aspx</link><pubDate>Wed, 11 Jul 2007 19:13:27 GMT</pubDate><description>E' uscito oggi il secondo articolo sui DataSource personalizzati su &lt;a href="http://www.html.it" title="HTML.it"&gt;HTML.it&lt;/a&gt;. Come vi avevo gia &lt;a href="http://www.peppedotnet.it/Blog/CustomDataSouce.aspx" title="DataSource personalizzati"&gt;segnalato&lt;/a&gt;, in questo articolo è possibile vedere come implementare il supporto per l'utilizzo dei parametri nei nostri DataSource personalizzati.
&lt;br /&gt;Questo il link:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2327/datasource-personalizzati/5/" title="DataSource personalizzati con implementazione per i parametri"&gt;http://aspnet.html.it/articoli/leggi/2327/datasource-personalizzati/5/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Buona lettura !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/DataSource.aspx" title="TAG: DataSource"&gt;DataSource&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/CustomDataSourceWithParametersSupport.aspx#comm</comments><guid>/Blog/CustomDataSourceWithParametersSupport.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/243.aspx</trackback:ping></item><item><title>DataSource personalizzati</title><link>http://www.peppedotnet.it/Blog/CustomDataSouce.aspx</link><pubDate>Wed, 04 Jul 2007 19:29:43 GMT</pubDate><description>E uscito oggi il primo di due articoli sulla costruzione di controlli DataSource personalizzati su &lt;a href="http://www.html.it" title="HTML.it"&gt;HTML.it&lt;/a&gt;; in questo ho fatto una breve panoramica sui DataSource presenti di default nel .NET Framework, per poi vedere come costruirne uno personalizzato per la lettura di feed RSS e ATOM.
&lt;br /&gt;Nella seconda parte, che dovrebbe uscire la prossima settimana, si vedrà come implementare il supporto per i parametri nel nostro DataSource personalizzato.
&lt;br /&gt;Ecco il link del primo articolo:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2327/datasource-personalizzati" title="DataSource personalizzati"&gt;http://aspnet.html.it/articoli/leggi/2327/datasource-personalizzati&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/DataSource.aspx" title="TAG: DataSource"&gt;DataSource&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/CustomDataSouce.aspx#comm</comments><guid>/Blog/CustomDataSouce.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/239.aspx</trackback:ping></item><item><title>Validation of  ViewState Mac failed</title><link>http://www.peppedotnet.it/Blog/ValidationOf ViewStateMacFailed.aspx</link><pubDate>Sun, 24 Jun 2007 16:23:59 GMT</pubDate><description>Da un pò di giorni, il mio sito mi ritorna ogni tanto questa eccezione:
&lt;br /&gt;
&lt;br /&gt;&lt;div style="font-style: italic; color: red"&gt;HttpException (0x80004005): Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that &lt;machineKey&gt; configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.&lt;/div&gt;
&lt;br /&gt;Mi sono documentato un pò in rete, ed ho trovato &lt;a href="http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101988" title="Validation of ViewState MAC Failed when posting too quickly"&gt;questo feedback&lt;/a&gt; sul sito Microsoft. Sembra infatti che questo tipo di errore, esca fuori se si utilizzano uno di questi controlli: GridView, DetailsView o FormView e le relative proprietà DataKeyNames. Questo perchè quei controlli, se hanno la proprietà DataKeyNames valorizzata, richiedono che il ViewState sia criptato. Il meccanismo di ASP.NET, per criptare il ViewState aggiunge questi due campi hidden in fondo alla pagina:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;input&lt;/span&gt;&lt;span style='color:#FF0000'&gt; type&lt;span style='color:#0000FF'&gt;="hidden"&lt;/span&gt; name&lt;span style='color:#0000FF'&gt;="__VIEWSTATEENCRYPTED"&lt;/span&gt; id&lt;span style='color:#0000FF'&gt;="__VIEWSTATEENCRYPTED"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;=""&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Solo che, questi campi, in pagine un pò corpose, possono non essere renderizzati e se viene fatto un postback prima che questi vengano renderizzati, il browser inizia il postback senza di loro. Così facendo, senza quei controlli, ASP.NET non sa che il ViewState è stato criptato e causa l'eccezione che abbiamo descritto sopra.
&lt;br /&gt;
&lt;br /&gt;Un modo per risolvere il problema è quello di settare le proprietà dell'elemento pages, enableEventValidation a false e viewStateEncryptionMode a "Never":
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#FF0000'&gt; enableEventValidation&lt;span style='color:#0000FF'&gt;="false"&lt;/span&gt; viewStateEncryptionMode &lt;span style='color:#0000FF'&gt;="Never"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ViewState.aspx" title="TAG: ViewState"&gt;ViewState&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ValidationOf ViewStateMacFailed.aspx#comm</comments><guid>/Blog/ValidationOf ViewStateMacFailed.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/237.aspx</trackback:ping></item><item><title>DataSet tipizzati con Visual Studio</title><link>http://www.peppedotnet.it/Blog/DataSetTipizzatiConVisualStudio.aspx</link><pubDate>Thu, 24 May 2007 10:39:11 GMT</pubDate><description>E' uscito ieri il mio quarto articolo per &lt;a href="http://www.html.it" title="HTML.IT"&gt;HTML.IT&lt;/a&gt; !
&lt;br /&gt;Questa volta l'argomento sono i DataSet tipizzati, creati attraverso l'ausilio del designer di Visual Studio .NET 2005. Viene data la definizione di DataSet, vengono spiegati i passi per crearne all'interno dell'IDE Microsoft e infine vengono paragonati all'utilizzo dei Business Objects.
&lt;br /&gt;A mio parere è un articolo abbastanza completo sull'argomento.
&lt;br /&gt;Vi lascio il link..
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2257/dataset-tipizzati-con-visual-studio" title="DataSet tipizzati con Visual Studio"&gt;http://aspnet.html.it/articoli/leggi/2257/dataset-tipizzati-con-visual-studio&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ADO.NET.aspx" title="TAG: ADO.NET"&gt;ADO.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/DataSet.aspx" title="TAG: DataSet"&gt;DataSet&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Visual Studio .NET 2005.aspx" title="TAG: Visual Studio .NET 2005"&gt;Visual Studio .NET 2005&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/DataSetTipizzatiConVisualStudio.aspx#comm</comments><guid>/Blog/DataSetTipizzatiConVisualStudio.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/232.aspx</trackback:ping></item><item><title>Gestione avanzate della site navigation di ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/AdvancedSiteNavigationASPNET2.aspx</link><pubDate>Wed, 09 May 2007 21:09:56 GMT</pubDate><description>Continua la serie di articoli, per HTML.IT, sulle personalizzazioni che possiamo attuare sui meccanismi di ASP.NET 2.0 con un articolo sulla &lt;a href='http://aspnet.html.it/articoli/leggi/2239/gestione-avanzata-di-sitemap-e-navigazione' title='Gestione avanzata della site navigation di ASP.NET (HTML.IT)'&gt;gestione avanzata della site navigation di ASP.NET 2.0 (HTML.IT)&lt;/a&gt;.
&lt;br /&gt;Questi gli argomenti trattati:
&lt;br /&gt;- descrizione della sitemap
&lt;br /&gt;- sitemap collegate
&lt;br /&gt;- localizzazione della sitemap
&lt;br /&gt;
&lt;br /&gt;Buona lettura !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SiteMap.aspx" title="TAG: SiteMap"&gt;SiteMap&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Site Navigation.aspx" title="TAG: Site Navigation"&gt;Site Navigation&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/AdvancedSiteNavigationASPNET2.aspx#comm</comments><guid>/Blog/AdvancedSiteNavigationASPNET2.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/229.aspx</trackback:ping></item><item><title>Ritardo nelle pagine asincrone</title><link>http://www.peppedotnet.it/Blog/AsyncPagesDelay.aspx</link><pubDate>Thu, 26 Apr 2007 18:19:56 GMT</pubDate><description>Oggi mi è stato fatto notare che l'esecuzione di una query in maniera asincrona in una pagina ASP.NET, ritornava un recordo in meno di quanti erano stati richiesti effettivamente nella query.
&lt;br /&gt;In pratica, anche il &lt;a href="http://www.peppedotnet.it/Articoli/AsyncPages.aspx" title="Creazione di pagine asincrone"&gt;mio stesso esempio&lt;/a&gt;, a volte, aveva un comportamento del genere. Questo però solo nell'esecuzione di una query ad un database, e non nella chiamata asincrona ad un web service.
&lt;br /&gt;Per risolvere la cosa, basta utilizzare la keyword &lt;a href="http://msdn2.microsoft.com/en-us/library/ms187331.aspx" title="Keyword WAITFOR DELAY"&gt;WAITFOR DELAY&lt;/a&gt;, propria del T-SQL, che blocca per i secondi/minuti/ore che decidiamo l'esecuzione della query.
&lt;br /&gt;Ecco una query d'esempio:
&lt;br /&gt;
&lt;br /&gt;&lt;div style="code"&gt;&lt;pre&gt;"WAITFOR DELAY '0:0:15'; SELECT ... bla bla bla"&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;][&lt;a href="http://www.peppedotnet.it/Tags/Pagine asincrone.aspx" title="TAG: Pagine asincrone"&gt;Pagine asincrone&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/AsyncPagesDelay.aspx#comm</comments><guid>/Blog/AsyncPagesDelay.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/224.aspx</trackback:ping></item><item><title>BuildProvider per sezioni di configurazione personalizzate</title><link>http://www.peppedotnet.it/Blog/ConfigBuildProvider.aspx</link><pubDate>Thu, 30 Nov 2006 17:06:05 GMT</pubDate><description>Ho inserito una pubblicazione sul sito dello User Group &lt;a href="http://www.xedotnet.org/default.aspx" title="Xe.NET"&gt;Xe.NET&lt;/a&gt; proprio sul nuovo progetto che ho inserito qui su peppedotnet.
&lt;br /&gt;Questo il link:
&lt;br /&gt;&lt;a href="http://www.xedotnet.org/40/section.aspx/356" title="BuildProvider per sezioni di configurazione personalizzate"&gt;http://www.xedotnet.org/40/section.aspx/356&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Il progetto l'ho chiamato &lt;a href="http://www.peppedotnet.it/Projects/ConfigSectionBuildProvider.aspx" title="ConfigSectionBuildProvider"&gt;ConfigSectionBuildProvider&lt;/a&gt;. Serve a creare tutte le classi utili per l'utilizzo di sezioni di configurazione personalizzate tramite la descrizione di queste ultime all'interno di uno o più file .configSection, inseriti all'interno della directory App_Code di un'applicazione web.
&lt;br /&gt;In pratica, con un file .configSection definito come segue:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;configSection&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="MySection"&lt;/span&gt; type&lt;span style='color:#0000FF'&gt;="Peppe.Config.MySection"&lt;/span&gt; namespace&lt;span style='color:#0000FF'&gt;="Peppe.Config"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;MySection&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Author&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Name&lt;span style='color:#0000FF'&gt;="System.String"&lt;/span&gt; Surname&lt;span style='color:#0000FF'&gt;="System.String"&lt;/span&gt; Age&lt;span style='color:#0000FF'&gt;="System.Int32"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Articles&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;            &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Article&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="System.Int32"&lt;/span&gt; Title&lt;span style='color:#0000FF'&gt;="System.String"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;Articles&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;MySection&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;configSection&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;ho la possibilità di utilizzare la seguente sezione personalizzata all'interno del web.config:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;configSections&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;section&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="MySection"&lt;/span&gt; type&lt;span style='color:#0000FF'&gt;="Peppe.Config.MySection"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;configSections&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;MySection&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Author&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Name&lt;span style='color:#0000FF'&gt;="Giuseppe"&lt;/span&gt; Surname&lt;span style='color:#0000FF'&gt;="Marchi"&lt;/span&gt; Age&lt;span style='color:#0000FF'&gt;="23"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Articles&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Article&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="1"&lt;/span&gt; Title&lt;span style='color:#0000FF'&gt;="Configuration Section in ASP.NET 2.0"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Article&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="2"&lt;/span&gt; Title&lt;span style='color:#0000FF'&gt;="Creazione di pagine asincrone"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Article&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="3"&lt;/span&gt; Title&lt;span style='color:#0000FF'&gt;="Hello Workflow"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;Articles&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;MySection&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;e posso richiamare tali informazioni utilizzando le classi relative alla sezione di configurazione, che vengono create a run-time, all'interno delle pagine della mia applicazione:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;MySection config = (MySection)ConfigurationManager.GetSection(&lt;span style="color: #A31515"&gt;"MySection"&lt;/span&gt;);
&lt;br /&gt;StringBuilder sb = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; StringBuilder();
&lt;br /&gt;sb.AppendFormat(&lt;span style="color: #A31515"&gt;"&lt;h2&gt;{0} {1}&lt;/h2&gt;"&lt;/span&gt;, config.Author.Name, config.Author.Surname);
&lt;br /&gt;sb.AppendFormat(&lt;span style="color: #A31515"&gt;"Age: {0}&lt;br /&gt;"&lt;/span&gt;, config.Author.Age);
&lt;br /&gt;sb.Append(&lt;span style="color: #A31515"&gt;"&lt;hr /&gt;&lt;h3&gt;Articles&lt;/h3&gt;"&lt;/span&gt;);
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;foreach&lt;/span&gt; (Article art &lt;span style="color: #0000FF"&gt;in&lt;/span&gt; config.Articles)
&lt;br /&gt;{
&lt;br /&gt;    sb.AppendFormat(&lt;span style="color: #A31515"&gt;"{0} - {1}&lt;br /&gt;"&lt;/span&gt;, art.ID, art.Title);
&lt;br /&gt;}
&lt;br /&gt;Response.Write(sb.ToString());&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Tutto ciò senza dover scriver alcuna riga di codice !</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ConfigBuildProvider.aspx#comm</comments><guid>/Blog/ConfigBuildProvider.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/180.aspx</trackback:ping></item><item><title>Errore nel caricamento dei temi con l'utilizzo dell'url rewriting</title><link>http://www.peppedotnet.it/Blog/ErrorThemesUrlRewriting.aspx</link><pubDate>Tue, 31 Oct 2006 17:34:34 GMT</pubDate><description>Se utilizzate nei vostri progetti sia tecniche di url rewriting che i nuovi temi di ASP.NET 2, vi sarete accorti che questi, soprattutto per quanto riguarda i css, nn vengono caricati correttamente, in quanto mantengono il percorso originario presente nella pagina effettivamente servita.
&lt;br /&gt;Quindi, nella root dell'applicazione potrebbe andare tutto bene, mentre nelle sottodirectory il riferimento ai file css viene perso.
&lt;br /&gt;E' possibile però, scrivere del codice per evitare che tutto ciò accada, e dare ad ogni pagina il percorso assoluto dei file css. Questo codice va inserito all'interno del metodo Render di una classe custom che eredita da Page, e che dovrà essere da ora in poi la classe da cui derivano tutte le pagine della vostra applicazione.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;namespace&lt;/span&gt; Peppe.Web.UI
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;class&lt;/span&gt; BasePage : Page
&lt;br /&gt;    {
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;public&lt;/span&gt; BasePage()
&lt;br /&gt;        { }
&lt;br /&gt;
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;override&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Render(HtmlTextWriter writer)
&lt;br /&gt;        {
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;foreach&lt;/span&gt; (Control control &lt;span style="color: #0000FF"&gt;in&lt;/span&gt; Page.Header.Controls)
&lt;br /&gt;            {
&lt;br /&gt;                HtmlLink link;
&lt;br /&gt;
&lt;br /&gt;                link = control &lt;span style="color: #0000FF"&gt;as&lt;/span&gt; HtmlLink;
&lt;br /&gt;                &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; ((link != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;) &amp;&amp; link.Href.StartsWith(&lt;span style="color: #A31515"&gt;"~/"&lt;/span&gt;))
&lt;br /&gt;                {
&lt;br /&gt;                    &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (Request.ApplicationPath == &lt;span style="color: #A31515"&gt;"/"&lt;/span&gt;)
&lt;br /&gt;                        link.Href = link.Href.Substring(1);
&lt;br /&gt;                    &lt;span style="color: #0000FF"&gt;else&lt;/span&gt;
&lt;br /&gt;                        link.Href = Request.ApplicationPath + &lt;span style="color: #A31515"&gt;"/"&lt;/span&gt; + link.Href.Substring(&lt;span style="color: #A31515"&gt;"~/"&lt;/span&gt;.Length);
&lt;br /&gt;                }
&lt;br /&gt;            }
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;base&lt;/span&gt;.Render(writer);
&lt;br /&gt;        }
&lt;br /&gt;    }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ErrorThemesUrlRewriting.aspx#comm</comments><guid>/Blog/ErrorThemesUrlRewriting.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/173.aspx</trackback:ping></item><item><title>Profili per la configurazione e l'utilizzo dell'output cache</title><link>http://www.peppedotnet.it/Blog/outputCacheProfile.aspx</link><pubDate>Thu, 26 Oct 2006 17:22:20 GMT</pubDate><description>E' possibile tramite degli elementi di configurazione presenti nel web.config, crearsi dei profili specifici per l'utilizzo della tecnica di output cache all'interno delle pagine della propria applicazione.
&lt;br /&gt;Questa possibilità è stata resa disponibile in quanto, le direttive di output cache molto spesso sono le stesse per più pagine, e riportare le stesse informazioni su più pagine risulta sempre un lavoro abbastanza ridondante.
&lt;br /&gt;Il gruppo di elementi cui faccio riferimento sono gli elementi figli dell'elemento &lt;caching&gt;, ed in particolare l'elemento &lt;outputCacheProfile&gt; che può contenere più elementi "add", che rappresentano ognuno un tipo di profilo diverso per la configurazione dell'output cache delle pagine.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;caching&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;  &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;outputCache&lt;/span&gt;&lt;span style='color:#FF0000'&gt; enableOutputCache&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;  &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;outputCacheSettings&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;outputCacheProfiles&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="VaryByAll"&lt;/span&gt;
&lt;br /&gt;           duration&lt;span style='color:#0000FF'&gt;="20"&lt;/span&gt; enabled&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;
&lt;br /&gt;           varyByParam&lt;span style='color:#0000FF'&gt;="*"&lt;/span&gt; location&lt;span style='color:#0000FF'&gt;="Server"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="VaryByCustomerID"&lt;/span&gt;
&lt;br /&gt;           duration&lt;span style='color:#0000FF'&gt;="60"&lt;/span&gt; enabled&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;
&lt;br /&gt;           varyByParam&lt;span style='color:#0000FF'&gt;="CustomerID"&lt;/span&gt; location&lt;span style='color:#0000FF'&gt;="Server"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="VaryByLanguage"&lt;/span&gt; duration&lt;span style='color:#0000FF'&gt;="60"&lt;/span&gt;
&lt;br /&gt;           enabled&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt; varyByHeader&lt;span style='color:#0000FF'&gt;="Accept-Language"&lt;/span&gt; location&lt;span style='color:#0000FF'&gt;="Server"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;outputCacheProfiles&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;  &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;outputCacheSettings&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;caching&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Perciò, dopo aver configurato i nosri profili nel file di configurazione, non dobbiamo far altro che andarli ad applicare nelle pagine scelte, specificando l'attributo "CacheProfile" della direttiva di pagina @OutputCache.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;%@&lt;/span&gt;&lt;span style='color:#FF0000'&gt; OutputCache CacheProfile&lt;span style='color:#0000FF'&gt;="VaryByAll"&lt;/span&gt; %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS:  [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Cache.aspx" title="TAG: Cache"&gt;Cache&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/web.config.aspx" title="TAG: Web.config"&gt;Web.config&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/outputCacheProfile.aspx#comm</comments><guid>/Blog/outputCacheProfile.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/171.aspx</trackback:ping></item><item><title>Il controllo CompareValidator</title><link>http://www.peppedotnet.it/Blog/CompareValidatorControl.aspx</link><pubDate>Tue, 24 Oct 2006 17:38:34 GMT</pubDate><description>E' uno dei controlli di validazione presenti gia in ASP.NET 1.x, ed esteso nella versione 2.0, che permette di controllare il valore inserito in due campi, o il valore inserito in un singolo campo o con un valore predefinito o con un tipo di dato.
&lt;br /&gt;E' utilissimo per esempio, per controllare che l'utente re-inserisca correttamente la password scelta:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;Insert password&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="txtPassword1"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; TextMode&lt;span style='color:#0000FF'&gt;="Password"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;Repeat password:&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="txtPassword2"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; TextMode&lt;span style='color:#0000FF'&gt;="Password"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Button&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="btnFirstCheck"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; Text&lt;span style='color:#0000FF'&gt;="Check password"&lt;/span&gt; ValidationGroup&lt;span style='color:#0000FF'&gt;="FirstCheck"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:CompareValidator&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="CompareValidator1"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;
&lt;br /&gt;                      ControlToCompare&lt;span style='color:#0000FF'&gt;="txtPassword2"&lt;/span&gt;
&lt;br /&gt;                      ControlToValidate&lt;span style='color:#0000FF'&gt;="txtPassword1"&lt;/span&gt;
&lt;br /&gt;                      ErrorMessage&lt;span style='color:#0000FF'&gt;="The two fields must be equals"&lt;/span&gt;
&lt;br /&gt;                      ValidationGroup&lt;span style='color:#0000FF'&gt;="FirstCheck"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Nell'esempio si nota che tramite le proprietà ControlToCompare e ControlToValidate, il validator controllare che i valori inseriti all'interno di quelle due textbox siano uguali. Il termine di confronto è dato dall'attributo Operator, che di default è settato su "Equal".
&lt;br /&gt;Un secondo utilizzo può essere invece quello di controllare che il valore inserito all'interno della textbox, sia una data valida.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;Insert valid date&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="txtDate"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Button&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="btnSecondCheck"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; Text&lt;span style='color:#0000FF'&gt;="Check date"&lt;/span&gt; ValidationGroup&lt;span style='color:#0000FF'&gt;="SecondCheck"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:CompareValidator&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="CompareValidator2"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;
&lt;br /&gt;                      ControlToValidate&lt;span style='color:#0000FF'&gt;="txtDate"&lt;/span&gt;
&lt;br /&gt;                      ErrorMessage&lt;span style='color:#0000FF'&gt;="Invalid date"&lt;/span&gt;
&lt;br /&gt;                      Operator&lt;span style='color:#0000FF'&gt;="DataTypeCheck"&lt;/span&gt;
&lt;br /&gt;                      Type&lt;span style='color:#0000FF'&gt;="Date"&lt;/span&gt;
&lt;br /&gt;                      ValidationGroup&lt;span style='color:#0000FF'&gt;="SecondCheck"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;E' possibile effettuare questo controllo grazie alla proprietà Operator, che se settata su DataTypeCheck, dice al controllo CompareValidator di non considerare la proprietà ControlToCompare e controllare invece che il dato inserito sia del tipo specificato attraverso la proprietà Type.
&lt;br /&gt;
&lt;br /&gt;Oltre a questi due semplici esempi, è possibile fare altri tipi di confronti, scegliendo il valore della proprietà Operator, tra uno di questi:
&lt;br /&gt;
&lt;br /&gt;DataTypeCheck
&lt;br /&gt;Equal
&lt;br /&gt;GreaterThan
&lt;br /&gt;GreaterThanEqual
&lt;br /&gt;LessThan
&lt;br /&gt;LessThanEqual
&lt;br /&gt;NotEqual
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS:  [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Validator controls.aspx" title="TAG: Validator controls"&gt;Validator controls&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/CompareValidatorControl.aspx#comm</comments><guid>/Blog/CompareValidatorControl.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/169.aspx</trackback:ping></item><item><title>Errore all'interno di pagine personalizzabili tramite web part</title><link>http://www.peppedotnet.it/Blog/ErroreInUnaWebPartPage.aspx</link><pubDate>Sun, 22 Oct 2006 18:59:32 GMT</pubDate><description>Oggi mi è capitata questa cosa. Ho inserito tutto il codice per l'utilizzo della feature di personalizzazione delle pagine web tramite web part, sia all'interno del web.config che all'interno di una pagina dove ho scelto di inserire le mie web part e i controlli per gestirle.
&lt;br /&gt;Apro la pagina nel browser e mi trovo questo messaggio di errore:
&lt;br /&gt;
&lt;br /&gt;&lt;div style="color: red; margin-left: 15px; font-style: italic"&gt;La modalità di visualizzazione specificata è attualmente disattivata in questa pagina. Assicurarsi che la personalizzazione sia attivata per l'utente corrente.
&lt;br /&gt;Nome parametro: value&lt;/div&gt;
&lt;br /&gt;Da cos'è derivato ? Semplice, non avevo fatto login... Eh si, perchè l'utilizzo di pagine personalizzate tramite web part prevede che l'utente corrente sia autenticato. Questo per permettere al provider di personalizzazione di salvare sul database i suoi settaggi per ogni pagina visualizzata o modificata. 
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ErroreInUnaWebPartPage.aspx#comm</comments><guid>/Blog/ErroreInUnaWebPartPage.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/168.aspx</trackback:ping></item><item><title>Differenze tra i metodi Eval e Bind</title><link>http://www.peppedotnet.it/Blog/DifferencesBetweenBindAndEvalMethods.aspx</link><pubDate>Sat, 21 Oct 2006 15:42:16 GMT</pubDate><description>La sintassi per effettuare il databinding su controlli che utilizzano l'approccio a template è stata modificata dalla versione 1.x alla 2.0 di ASP.NET, in quanto il metodo DataBinder.Eval(Container.DataItem "Campo"), che continua comunque a funzionare, è stato sorpassato dall'arrivo dei metodi Eval() e Bind().
&lt;br /&gt;
&lt;br /&gt;Il metodo Eval, è quello che rispecchia in tutto il vecchio DataBinder.Eval, in quanto può accettare o un parametro singolo (il nome del campo su cui fare databinding) oppure può aggiungere anche la stringa di formattazione di tale dato.
&lt;br /&gt;
&lt;br /&gt;Il metodo Bind, invece, è stato creato appositamente per quei controlli che supportano anche l'update o l'insert di dati, in quanto permette di effettuare quello che è stato chiamato il "two way databinding", la tecnica cioè di fare da ponte tra la presentazione del dato e la sua scrittura nella fonte di dati. Il metodo va utilizzato infatti, all'interno di template come EditItemTemplate o InsertItemTemplate, propri dei controlli quali la GridView, la FormView o la DetailsView.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:GridView&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="grid"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; DataSourceID&lt;span style='color:#0000FF'&gt;="ObjectDataSource1"&lt;/span&gt; AutoGenerateColumns&lt;span style='color:#0000FF'&gt;="False"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Columns&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TemplateField&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;            &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;ItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;                &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Image&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="img"&lt;/span&gt; ImageUrl='&lt;%# Eval("Img", "images/{0}") %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;' runat="server" /&gt;
&lt;br /&gt;            &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;ItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;            &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;EditItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;                &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="txt"&lt;/span&gt; Text='&lt;%# Bind("Img") %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;' runat="server" /&gt;
&lt;br /&gt;            &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;EditItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TemplateField&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;Columns&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:GridView&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Inoltre, esistono sono casi in cui, il metodo Bind dev'essere utilizzato anche all'interno del template ItemTemplate, in quanto può dover fornire il dato di una tale colonna all'operazione che viene effettuata lato server, anche se la specifica colonna non viene effettivamente modificata, in quanto, magari, è stato segnata come ReadOnly. E' il caso questo di colonne contenenti identificatori e chiavi univoche.
&lt;br /&gt;
&lt;br /&gt;&lt;span style="padding-left: 15px; font-style: italic"&gt;N.b.: Se decidete di utilizzare il metodo Bind, per effettuare il databinding dei dati, il controllo che viene "bindato" deve avere settata la proprietà ID.&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/DifferencesBetweenBindAndEvalMethods.aspx#comm</comments><guid>/Blog/DifferencesBetweenBindAndEvalMethods.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/166.aspx</trackback:ping></item><item><title>La direttiva @MasterType</title><link>http://www.peppedotnet.it/Blog/MasterTypePageDirective.aspx</link><pubDate>Fri, 20 Oct 2006 16:22:49 GMT</pubDate><description>Sappiamo che ogni pagina ASP.NET ha la proprietà publica Master, propria della classe Page, utile alla gestione o al richiamo di proprietà o metodi pubblici della master page associata alla pagina corrente.
&lt;br /&gt;Per chiamare per esempio il metodo HelloWorld() definito all'interno del file PeppeDotNet.master.cs, dobbiamo però effettuare un casting esplicito sulla proprietà Master, in quando questa ritorna un oggetto di tipo "MasterPage", che chiaramente non contiene il nostro metodo HelloWorld().
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;     PeppeDotNet masterPage = (PeppeDotNet)Page.Master;
&lt;br /&gt;     masterPage.HelloWorld();
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Abbiamo però anche un'altra possibilità.
&lt;br /&gt;Specificando la direttiva di pagina @MasterType, all'interno della pagina di contenuto ("content page"), il .NET Framwork tratterà la proprietà Master come se fosse direttamente del tipo effettivamente utilizzato, aggiungendo quindi il nostro metodo HelloWorld().
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;%@ Page Language="C#" MasterPageFile="~/PeppeDotNet.master"
&lt;br /&gt;    CodeFile="Default.aspx.cs" Inherits="_Default" %&gt;
&lt;br /&gt;&lt;%@ MasterType VirtualPath="~/PeppeDotNet.master"  %&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;     Master.HelloWorld();
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;La direttiva @MasterType, prevede l'utilizzo di due attributi: VirtualPath e TypeName, che non possono essere utilizzati assieme. Il primo si aspetta il percorso virtuale del file .master mentre il secondo prevede il nome della classe di code behind propria della master page (per intenderci, il nome della classe presente nel file PeppeDotNet.master.cs).</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/MasterTypePageDirective.aspx#comm</comments><guid>/Blog/MasterTypePageDirective.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/165.aspx</trackback:ping></item><item><title>L'utility &quot;Copy Web Site&quot;</title><link>http://www.peppedotnet.it/Blog/CopyWebSiteTool.aspx</link><pubDate>Fri, 20 Oct 2006 15:21:59 GMT</pubDate><description>In Visual Studio 2005 è stata aggiunta questa nuova utility che ci permette di copiare un intero sito web dalla macchina locale ad un server virtuale, senza effettuare il cut and paste dei files e delle configurazioni a manina...
&lt;br /&gt;E' possibile copiare sia l'intero sito aperto in Visual Studio, che singoli files; inoltre è possibile riscontrare se i files correnti sono stati aggiornati, aggiunti o cancellati rispetto alla versione del sito presente sul server. Infine è stata aggiunta anche la possibilità di sincronizzare i due siti (in locale e in remoto) in modo tale da avere sempre la stessa versione dei file in uso.
&lt;br /&gt;L'utility è presente seguendo questo percorso (una volta che è stato aperto il sito web da locale):
&lt;br /&gt;
&lt;br /&gt;&lt;span style="padding-left: 15px; font-style: italic"&gt;Web Site &gt; Copy Web Site ...&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;Per selezionare il sito remoto, basta fare click su "Connecto to..." e digitare il percorso. Il sito da sincronizzare può essere o  sul file system locale, o sul web server locale, o su un server remoto o raggiunto via FTP.
&lt;br /&gt;
&lt;br /&gt;In &lt;a href="http://msdn2.microsoft.com/en-us/library/c95809c0.aspx" title="Copy Web Site Tool"&gt;questa pagina&lt;/a&gt;, è presente un breve How To, su come utilizzare il tool.
&lt;br /&gt;
&lt;br /&gt;TAGS:  [&lt;a href="http://www.peppedotnet.it/Tags/Visual Studio 2005.aspx" title="TAG: Visual Studio 2005"&gt;Visual Studio 2005&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/CopyWebSiteTool.aspx#comm</comments><guid>/Blog/CopyWebSiteTool.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/163.aspx</trackback:ping></item><item><title>La classe SqlConnectionStringBuilder</title><link>http://www.peppedotnet.it/Blog/SqlConnectionStringBuilderClass.aspx</link><pubDate>Wed, 18 Oct 2006 20:48:02 GMT</pubDate><description>Nella versione 2.0 del framework è stata aggiunta questa nuova classe: la classe SqlConnectionStringBuilder. La sua funzione è quella di creare la stringa di connessione per un database SQL Server date le informazioni di base sul server e sul nome del database, più eventuali valori aggiuntivi.
&lt;br /&gt;La classe deriva da DbConnectionStringBuilder, cui si riferiscono anche le classi OleDbConnectionStringBuilder, OdbcConnectionStringBuilder, OracleConnectionStringBuilder, create per replicare la stessa funzione per tutti gli altri tipi di database.
&lt;br /&gt;Ecco un paio di esempi:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; GetSqlConnectionString()
&lt;br /&gt;{
&lt;br /&gt;        SqlConnectionStringBuilder builder = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; SqlConnectionStringBuilder();
&lt;br /&gt;        builder.DataSource = @&lt;span style="color: #A31515"&gt;"servername"&lt;/span&gt;;
&lt;br /&gt;        builder.InitialCatalog = @&lt;span style="color: #A31515"&gt;"Northwind"&lt;/span&gt;;
&lt;br /&gt;        builder.UserID = @&lt;span style="color: #A31515"&gt;"sa"&lt;/span&gt;;
&lt;br /&gt;        builder.Password = @&lt;span style="color: #A31515"&gt;"sa_password"&lt;/span&gt;;
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; builder.ConnectionString;
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; GetSqlExpressConnectionString()
&lt;br /&gt;{
&lt;br /&gt;        SqlConnectionStringBuilder builder = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; SqlConnectionStringBuilder();
&lt;br /&gt;        builder.DataSource = @&lt;span style="color: #A31515"&gt;".\SQLEXPRESS"&lt;/span&gt;;
&lt;br /&gt;        builder.AttachDBFilename = @&lt;span style="color: #A31515"&gt;"C:\WebSite\App_Data\DataBase.mdf"&lt;/span&gt;;
&lt;br /&gt;        builder.IntegratedSecurity = &lt;span style="color: #0000FF"&gt;true&lt;/span&gt;;
&lt;br /&gt;        builder.UserInstance = &lt;span style="color: #0000FF"&gt;true&lt;/span&gt;;
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; builder.ConnectionString;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Questi tipi di classi sono sicuramente utili quando la stringa di connessione può essere composta da valori "dinamici", per esempio scelti dall'utente, per evitare quindi che questi valori possano rappresentare degli attacchi di sql injection.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/SqlConnectionStringBuilderClass.aspx#comm</comments><guid>/Blog/SqlConnectionStringBuilderClass.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/161.aspx</trackback:ping></item><item><title>Una curiosti&#224; sui validator controls</title><link>http://www.peppedotnet.it/Blog/ValidatorControlsIsValidProperties.aspx</link><pubDate>Wed, 18 Oct 2006 20:26:01 GMT</pubDate><description>ASP.NET ci mette a disposizione un gruppo di controlli per validare i dati inseriti in un form. Questo gruppo prende il nome di "Validator Controls". Tra i più popolari troviamo il RequiredFieldValidator control, che svolge il compito di controllare se in un determinato campo è presente o meno del testo.
&lt;br /&gt;Tutti questi controlli ereditano dalla classe base BaseValidator, che espone metodi e proprietà utili alla validazione di form e alla visualizzazione di eventuali messaggi di errore all'interno della pagina.
&lt;br /&gt;
&lt;br /&gt;Il controllo di convalida di questi oggetti viene fatto sia lato client (tramite javascript), sia lato server. Ma che succede se le pagine dove sono presenti questi controlli sono visitate con un browser che non supporta javascript ?
&lt;br /&gt;
&lt;br /&gt;Semplice, la validazione lato client non viene effettuata ! Quella lato server, invece, continua a funzionare.
&lt;br /&gt;E' consigliabile quindi sempre di utilizzare la proprietà IsValid della classe Page, prima di effettuare delle operazioni su quei dati letti dal form.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #008200"&gt;//da effettuare sempre...
&lt;/span&gt;
&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;(Page.IsValid)
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #008200"&gt;//esecuzione delle mie operazioni
&lt;/span&gt;
}&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ValidatorControlsIsValidProperties.aspx#comm</comments><guid>/Blog/ValidatorControlsIsValidProperties.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/160.aspx</trackback:ping></item><item><title>L'utility aspnet_regsql e Sql Server 2005 Express</title><link>http://www.peppedotnet.it/Blog/aspnet_regsql_and_SQLServerEXPRESS.aspx</link><pubDate>Mon, 16 Oct 2006 11:03:13 GMT</pubDate><description>L'utility aspnet_regsql (che potete trovare al percorso C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxx) serve per abilitare i database SQL Server per tutte le nuove features aggiunte nella versione 2.0 di ASP.NET; è possibile infatti abilitare tutti gli oggetti necessari per l'utilizzo dei meccanismi di Membership, Roles, Profile e Personalization.
&lt;br /&gt;E' possibile eseguire l'utility direttamente a riga di comando, oppure tramite la sua interfaccia grafica (esecuzione senza passaggio di alcun parametro).
&lt;br /&gt;Se utilizzata a riga di comando, l'utility necessita della specifica di alcuni parametri. Ecco la lista completa:
&lt;br /&gt;
&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;b&gt;OPZIONI GENERALI&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-?&lt;/td&gt;&lt;td&gt;Visualizza questo argomento della Guida.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-W&lt;/td&gt;&lt;td&gt;Modalità guidata. Impostazione predefinita utilizzata se non sono specificati altri parametri.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;&lt;b&gt;OPZIONI DI CONNESSIONE SQL&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-S &lt;server&gt;&lt;/td&gt;&lt;td&gt;Istanza di SQL Server (SQL Server 7.0 o versione successiva) da utilizzare.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-U &lt;ID accesso&gt;&lt;/td&gt;&lt;td&gt;Nome utente di SQL Server per l'autenticazione. E' richiesta l'opzione -P.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-P &lt;password&gt;&lt;/td&gt;&lt;td&gt;Password di SQL Server per l'autenticazione. E' richiesta l'opzione -U.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-E&lt;/td&gt;&lt;td&gt;Esecuzione dell'autenticazione con le credenziali di Windows correnti.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-C &lt;stringa di connessione&gt;&lt;/td&gt;&lt;td&gt;Stringa di connessione. Anziché‚ specificare nome utente, password e nome del server, è possibile specificare una stringa di connessione di SQL Server. Tale stringa non deve contenere un nome di database, a meno che non venga specificato diversamente.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-sqlexportonly &lt;nomefile&gt;&lt;/td&gt;&lt;td&gt;Generazione del file script SQL per l'aggiunta o la rimozione delle funzionalità specificate, senza eseguire l'operazione effettiva. Sono supportate le opzioni seguenti: -A, -R, -ssadd e -ssremove.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;&lt;b&gt;OPZIONI DEI SERVIZI APPLICATIVI&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-A all|m|r|p|c|w&lt;/td&gt;&lt;td&gt;Aggiunge il supporto per una funzionalità. E' possibile specificare più valori contemporaneamente, ad esempio:
&lt;br /&gt;-A mp
&lt;br /&gt;-A m -A p
&lt;br /&gt;
&lt;br /&gt;all: tutte le funzionalità
&lt;br /&gt;m: appartenenza
&lt;br /&gt;r: Gestione ruoli
&lt;br /&gt;p: profili
&lt;br /&gt;c: personalizzazione
&lt;br /&gt;w: provider di eventi Web SQL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-R all|m|r|p|c|w &lt;/td&gt;&lt;td&gt;Rimozione del supporto per una funzionalità. E' possibile specificare più valori contemporaneamente, ad esempio:
&lt;br /&gt;-R mp
&lt;br /&gt;-R m -R p
&lt;br /&gt;
&lt;br /&gt;all : tutte le funzionalità, oltre alle tabelle comuni e alle stored procedure condivise dalle funzionalità
&lt;br /&gt;m: appartenenza
&lt;br /&gt;r: Gestione ruoli
&lt;br /&gt;p: profili
&lt;br /&gt;c: personalizzazione
&lt;br /&gt;w: provider di eventi Web SQL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-d &lt;database&gt;&lt;/td&gt;&lt;td&gt;Nome del database da utilizzare con i servizi applicativi. Se non si specifica il nome del database, verrà utilizzato il database predefinito "aspnetdb".&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-Q&lt;/td&gt;&lt;td&gt;Modalità non interattiva. Non chiede di confermare la rimozione delle funzionalità.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;&lt;b&gt;OPZIONI RELATIVE ALLA DIPENDENZA DELLA CACHE SQL (PER SQL SERVER 7.0 E 2000)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-d &lt;database&gt;&lt;/td&gt;&lt;td&gt;Nome del database da utilizzare con la dipendenza della cache SQL in SQL 7.0 e SQL 2000. In alternativa, il nome del database può essere specificato utilizzando la stringa di connessione con l'opzione -C. (Richiesto&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-ed&lt;/td&gt;&lt;td&gt;Attivazione di un database per la dipendenza della cache SQL.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-dd&lt;/td&gt;&lt;td&gt;Disattivazione di un database per la dipendenza della cache SQL.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-et&lt;/td&gt;&lt;td&gt;Attivazione di una tabella per la dipendenza della cache SQL. E' richiesta l'opzione -t.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-dt&lt;/td&gt;&lt;td&gt;Disattivazione di una tabella per la dipendenza della cache SQL. E' richiesta l'opzione -t.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-t &lt;tabella&gt;&lt;/td&gt;&lt;td&gt;Nome della tabella da attivare o disattivare per la dipendenza della cache SQL. E' richiesta l'opzione -et o -dt.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-lt&lt;/td&gt;&lt;td&gt;Elenco di tutte le tabelle attivate per la dipendenza della cache SQL.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;br /&gt;&lt;b&gt;OPZIONI STATO SESSIONE&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-ssadd&lt;/td&gt;&lt;td&gt;Aggiunta del supporto per lo stato sessione in modalità SQLServer.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-ssremove&lt;/td&gt;&lt;td&gt;Rimozione del supporto per lo stato sessione in modalità SQLServer.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-sstype t|p|c&lt;/td&gt;&lt;td&gt;Tipo di supporto dello stato sessione:
&lt;br /&gt;
&lt;br /&gt;t: temporaneo. I dati dello stato sessione vengono archiviati nel database "tempdb", mentre le stored procedure per la gestione della sessione vengono installate nel database "ASPState". Se si riavvia SQL Server, i dati non vengono  mantenuti. (Impostazione predefinita)
&lt;br /&gt;
&lt;br /&gt;p: persistente. Sia le stored procedure che i dati dello stato sessione vengono archiviati nel database "ASPState".
&lt;br /&gt;
&lt;br /&gt;c: personalizzazione. Sia le stored procedure che i dati dello stato sessione vengono archiviati in un database personalizzato. E' necessario specificare il nome del database.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-d &lt;database&gt;&lt;/td&gt;&lt;td&gt;Nome del database personalizzato da utilizzare se -sstype è "c".&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;(testo prelevato direttamente dall'utility aspnet_sqlreg, attraverso l'attributo -?)
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;Se però abbiamo deciso di utilizzare un database SQL Server 2005 Express Edition, senza specificare il nome del server (attributo –S) o specificando il nome del computer su cui è installato SQL Server come nome del server, ecco che la nostra operazione sarà stoppata da questo messaggio di errore:
&lt;br /&gt;
&lt;br /&gt;&lt;div style="color:red; margin-left: 15px; font-style: italic"&gt;................Errore. Dettagli dell'eccezione:
&lt;br /&gt;Si è verificato un errore mentre si cercava di stabilire una connessione con il server.  Quando ci si connette a SQL Server 2005, questo errore potrebbe essere provocato dal fatto che l'SQL Server non ammette connessioni remote sotto le impostazioni predefinite. (provider: Provider Named Pipes, error: 40 - Impossibile aprire una connessione a SQL Server)
&lt;br /&gt;
&lt;br /&gt;Impossibile connettersi al database SQL per la registrazione delle dipendenze della cache.&lt;/div&gt;
&lt;br /&gt;Dove sbagliamo ?
&lt;br /&gt;Semplice, come nome del server va specificato un punto (.) seguito dal nome dell’istanza SQL Server installata nel computer. Il valore di tale istanza può essere estrapolato dal nome del servizio di sql server (MSSQL$&lt;nome_istanza&gt;), visualizzabile anche tramite l'utility Sql Server Configuration Manager. Il valore di default di tale istanza è SQLEXPRESS.
&lt;br /&gt;Ecco un esempio di utilizzo dell'utility aspnet_regsql con un esecuzione a buon fine:
&lt;br /&gt;
&lt;br /&gt;aspnet_regsql –E –S .\SQLEXPRESS –A all</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/aspnet_regsql_and_SQLServerEXPRESS.aspx#comm</comments><guid>/Blog/aspnet_regsql_and_SQLServerEXPRESS.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/159.aspx</trackback:ping></item><item><title>La directory App_Code</title><link>http://www.peppedotnet.it/Blog/LaDirectoryApp_Code.aspx</link><pubDate>Thu, 28 Sep 2006 14:55:16 GMT</pubDate><description>La directory App_Code contiene tutti i file classe che devono essere compilati a runtime come facenti parte dell'applicazione web. Questi file classe possono contenere tutti i componenti ASP.NET riconosciuti come server control personalizzati, provider personalizzati, build providers,  classi di business, HTTP module o HTTP handler, dataset tipizzati (.xsd) ...
&lt;br /&gt;Tutte queste classi, posizionate all'interno della directory App_Code, hanno il vincolo di essere scritte con lo stesso linguaggio. Se però, abbiamo bisogno di inserire classi scritte in linguaggi differenti, non dobbiamo far altro che creare delle sotto-directory per ogni linguaggio e modificare il web.config in questo modo:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;compilation&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;     &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;codeSubDirectories&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;          &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; directoryName&lt;span style='color:#0000FF'&gt;="VBDir"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;          &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; directoryName&lt;span style='color:#0000FF'&gt;="CSDir"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;     &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;codeSubDirectories&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;compilation&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;In questo modo, le classi presenti nelle due cartelle verranno compilate in due differenti assembly. Attenzione però, che se una delle sottodirectory dichiarate nel web.config non esiste, verrà generato un errore di compilazione
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/web.config.aspx" title="TAG: Web.config"&gt;Web.config&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET 2.0.aspx" title="TAG: ASP.NET 2.0"&gt;ASP.NET 2.0&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/LaDirectoryApp_Code.aspx#comm</comments><guid>/Blog/LaDirectoryApp_Code.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/155.aspx</trackback:ping></item><item><title>Le directory speciali di ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/ASPNETSpecialDirectories.aspx</link><pubDate>Wed, 27 Sep 2006 12:23:00 GMT</pubDate><description>Ogni applicazione web ASP.NET 2.0 ha la possibilità di inserire diverse directory "speciali"; queste sono definite speciali in quanto i files al loro interno vengono trattati in maniera particolare dal framework e dalla applicazione che li ospita. Una di queste directory, la "Bin", era gia presente nelle versioni 1.x di ASP.NET.
&lt;br /&gt;Vediamole in dettaglio:
&lt;br /&gt;
&lt;br /&gt;&lt;span style="text-decoration: underline"&gt;Bin&lt;/span&gt;
&lt;br /&gt;Contiene l'elenco degli assembly referenziati dall'applicazione.
&lt;br /&gt;Tipi di file: *.dll
&lt;br /&gt;
&lt;br /&gt;&lt;span style="text-decoration: underline"&gt;App_Browser&lt;/span&gt;
&lt;br /&gt;Contiene i file di definizione dei browser che il framework adopera per riconoscere i vari browser che accedono all'applicazione e per determinare funzionalità aggiuntive proprie per ogni browser.
&lt;br /&gt;Tipi di file: *.browser
&lt;br /&gt;
&lt;br /&gt;&lt;span style="text-decoration: underline"&gt;App_Code&lt;/span&gt;
&lt;br /&gt;Contiene i sorgenti delle classi utili all'applicazione, che vengono compilati a runtime quando vengono richieste le varie pagine del sito web e che vengono inserite automaticamente tra i riferimenti dell'applicazione.
&lt;br /&gt;Tipi di file: *.cs, *.vb, *.xsd
&lt;br /&gt;
&lt;br /&gt;&lt;span style="text-decoration: underline"&gt;App_Data&lt;/span&gt;
&lt;br /&gt;Contiene i file che in qualche modo fungono da fonte di dati per l'applicazione. Quindi da semplici file XML a archivi MS Access o SqlServer Express.
&lt;br /&gt;Tipi di file: *.xml, *.mdb, *.mdf
&lt;br /&gt;
&lt;br /&gt;&lt;span style="text-decoration: underline"&gt;App_GlobalResources&lt;/span&gt;
&lt;br /&gt;Contiene i file di risorse utili per la localizzazione, utilizzabili dall'intera applicazione.
&lt;br /&gt;Tipi di file: *.resx
&lt;br /&gt;
&lt;br /&gt;&lt;span style="text-decoration: underline"&gt;App_LocalResources&lt;/span&gt;
&lt;br /&gt;Contiene i file di risorse utili per la localizzazione, utilizzabili da singole pagine aspx.
&lt;br /&gt;Tipi di file: *.resx
&lt;br /&gt;
&lt;br /&gt;&lt;span style="text-decoration: underline"&gt;App_Themes&lt;/span&gt;
&lt;br /&gt;Contiene un insieme di file che definiscono il layout della propria applicazione web, comprese pagine web e singoli controlli.
&lt;br /&gt;Tipi di file: *.skin, *.css, *.xsl
&lt;br /&gt;
&lt;br /&gt;&lt;span style="text-decoration: underline"&gt;App_WebReferences&lt;/span&gt;
&lt;br /&gt;Contiene tutti i file WSDL utili a generare le classi proxy per l'utilizzo dei web services all'interno dell'applicazione.
&lt;br /&gt;Tipi di file: *.wsdl
&lt;br /&gt;
&lt;br /&gt;Visual Studio 2005 aiuta lo sviluppatore sia nell'inserimento di queste directory speciali, che nell'inserimento dei singoli file al loro interno, andando a filtrare la scelta del tipo del nuovo file in base alla cartella scelta.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNETSpecialDirectories.aspx#comm</comments><guid>/Blog/ASPNETSpecialDirectories.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/154.aspx</trackback:ping></item><item><title>ATLAS diventa ... &quot;ASP.NET 2.0 AJAX EXTENSION&quot;</title><link>http://www.peppedotnet.it/Blog/ASPNET2_AJAX_EXTENSION.aspx</link><pubDate>Tue, 12 Sep 2006 00:18:19 GMT</pubDate><description>E' notizia di poche ore... il nuovo nome di ATLAS sarà &lt;span style="text-decoration: underline"&gt;"ASP.NET 2.0 Ajax Extension"&lt;/span&gt; !
&lt;br /&gt;A dare l'&lt;a href="http://weblogs.asp.net/scottgu/archive/2006/09/11/_2200_Atlas_2200_-1.0-Naming-and-Roadmap.aspx" title="Annuncio ATLAS"&gt;annuncio&lt;/a&gt; è stato (chiaramente) &lt;a href="http://weblogs.asp.net/scottgu/default.aspx" title="Scott Guthrie"&gt;Scott Guthrie&lt;/a&gt;.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNET2_AJAX_EXTENSION.aspx#comm</comments><guid>/Blog/ASPNET2_AJAX_EXTENSION.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/152.aspx</trackback:ping></item><item><title>Come configurare un control per ricevere eventi PostBack</title><link>http://www.peppedotnet.it/Blog/ConfigureControlsToReceivePostbackEvents.aspx</link><pubDate>Sun, 10 Sep 2006 15:36:48 GMT</pubDate><description>Oggi mi è capitato di costruire un web control un pò particolare. Doveva essere l'insieme di più elementi input html, che dovevano scatenare entrambi degli eventi PostBack.
&lt;br /&gt;Ho creato quindi una classe che eredita da Control e che implementa l'interfaccia IPostBackEventHandler. Questa interfaccia, che consente di configurare il proprio web control per ricevere eventi PostBack, obbliga a definire il metodo RaisePostBackEvent, metodo con il compito di chiamare l'event handler per un nostro evento custom; nel mio caso, ho creato un evento Click.
&lt;br /&gt;Vediamo il codice:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;class&lt;/span&gt; TemplateList : Control, IPostBackEventHandler, INamingContainer
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;event&lt;/span&gt; EventHandler Click;
&lt;br /&gt;
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; SelectedItem
&lt;br /&gt;    {
&lt;br /&gt;        get
&lt;br /&gt;        {
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (ViewState[&lt;span style="color: #A31515"&gt;"SelectedItem"&lt;/span&gt;] != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;                &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; String.Format(&lt;span style="color: #A31515"&gt;"{0}"&lt;/span&gt;, ViewState[&lt;span style="color: #A31515"&gt;"SelectedItem"&lt;/span&gt;]);
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;else&lt;/span&gt;
&lt;br /&gt;                &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; String.Empty;
&lt;br /&gt;        }
&lt;br /&gt;        set { ViewState[&lt;span style="color: #A31515"&gt;"SelectedItem"&lt;/span&gt;] = value; }
&lt;br /&gt;    }
&lt;br /&gt;
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; OnClick(EventArgs e)
&lt;br /&gt;    {
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (Click != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;        {
&lt;br /&gt;            Click(&lt;span style="color: #0000FF"&gt;this&lt;/span&gt;, e);
&lt;br /&gt;        }
&lt;br /&gt;    }
&lt;br /&gt;
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; RaisePostBackEvent(&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; eventArgument)
&lt;br /&gt;    {
&lt;br /&gt;        SelectedItem = eventArgument;
&lt;br /&gt;        OnClick(&lt;span style="color: #0000FF"&gt;new&lt;/span&gt; EventArgs());
&lt;br /&gt;    }
&lt;br /&gt;
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;override&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Render(HtmlTextWriter writer)
&lt;br /&gt;    {
&lt;br /&gt;        writer.Write(&lt;span style="color: #A31515"&gt;"&lt;input type=\"image\" "&lt;/span&gt; +
&lt;br /&gt;                    &lt;span style="color: #A31515"&gt;"name=\"uno\" "&lt;/span&gt; +
&lt;br /&gt;                    &lt;span style="color: #A31515"&gt;"id=\"uno\" "&lt;/span&gt; +
&lt;br /&gt;                    &lt;span style="color: #A31515"&gt;"onclick=\""&lt;/span&gt; + Page.ClientScript.GetPostBackEventReference(&lt;span style="color: #0000FF"&gt;this&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"uno"&lt;/span&gt;) + &lt;span style="color: #A31515"&gt;"\" "&lt;/span&gt; +
&lt;br /&gt;                    &lt;span style="color: #A31515"&gt;"src=\"img1.gif\" /&gt;"&lt;/span&gt;);
&lt;br /&gt;        writer.Write(&lt;span style="color: #A31515"&gt;"&lt;input type=\"image\" "&lt;/span&gt; +
&lt;br /&gt;                    &lt;span style="color: #A31515"&gt;"name=\"due\" "&lt;/span&gt; +
&lt;br /&gt;                    &lt;span style="color: #A31515"&gt;"id=\"due\" "&lt;/span&gt; +
&lt;br /&gt;                    &lt;span style="color: #A31515"&gt;"onclick=\""&lt;/span&gt; + Page.ClientScript.GetPostBackEventReference(&lt;span style="color: #0000FF"&gt;this&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"due"&lt;/span&gt;) + &lt;span style="color: #A31515"&gt;"\" "&lt;/span&gt; +
&lt;br /&gt;                    &lt;span style="color: #A31515"&gt;"src=\"img2.gif\" /&gt;"&lt;/span&gt;);
&lt;br /&gt;    }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;In questo modo, ad ogni click su una delle due immagini, viene popolata la proprietà SelectedItem.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ConfigureControlsToReceivePostbackEvents.aspx#comm</comments><guid>/Blog/ConfigureControlsToReceivePostbackEvents.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/149.aspx</trackback:ping></item><item><title>FormsAuthentication timeout</title><link>http://www.peppedotnet.it/Blog/FormsAuthenticationTimeout.aspx</link><pubDate>Sun, 10 Sep 2006 12:23:34 GMT</pubDate><description>Sappiamo tutti che la FormsAuthentication di ASP.NET crea un cookie nel client dell'utente. Sappiamo anche che se decidiamo di utilizzare il Login control con l'opzione "Ricordati di me" attiva, questo cookie diventa persistente. Ma questo cookie ... per quanto tempo resta nel client dell'utente ?
&lt;br /&gt;
&lt;br /&gt;In ASP.NET 1.x il cookie, a meno di settaggi manuali via codice, aveva come cliclo di vita 50 anni. Capite bene che lasciare un cookie li per 50 anni non era il massimo della sicurezza.
&lt;br /&gt;
&lt;br /&gt;In ASP.NET 2.0, invece, un cookie persistente ha di default un ciclo di vita di &lt;span style="text-decoration:underline"&gt;30 minuti&lt;/span&gt;.
&lt;br /&gt;
&lt;br /&gt;Diventa quindi compito dello sviluppatore, decidere quanto far durare la vita di quel cookie.
&lt;br /&gt;Come ? Attraverso la proprietà &lt;a href="http://msdn2.microsoft.com/en-us/library/1d3t3c61.aspx" title="forms element"&gt;Timeout&lt;/a&gt; dell'elemento di configurazione proprio della FormsAuthentication.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;authentication&lt;/span&gt;&lt;span style='color:#FF0000'&gt; mode&lt;span style='color:#0000FF'&gt;="Forms"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;forms&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;=".ASPXAUTH"&lt;/span&gt; loginUrl&lt;span style='color:#0000FF'&gt;="pluyIn.aspx"&lt;/span&gt; timeout&lt;span style='color:#0000FF'&gt;="3600"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;authentication&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Se questo valore di timeout del cookie di autenticazione non viene cambiato, anche se l'opzione "Ricordati di me" del controllo Login è selezionata, l'utente resterà autenticato al sito solo per 30 minuti.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/FormsAuthenticationTimeout.aspx#comm</comments><guid>/Blog/FormsAuthenticationTimeout.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/148.aspx</trackback:ping></item><item><title>Css friendly control adapters</title><link>http://www.peppedotnet.it/Blog/CssFriendlyControlAdapters_Beta2.aspx</link><pubDate>Sat, 09 Sep 2006 13:02:13 GMT</pubDate><description>E' stata rilasciata dal team di ASP.NET, la Beta 2 del toolkit "Css Friendly ASP.NET 2.0 Control Adapters", pacchetto di classi che forniscono la possibilità di emettere codice che utilizza solamente i css in presenza di alcuni dei nuovi controls di ASP.NET 2.
&lt;br /&gt;Questi i nuovi controlli coperti dai nuovi adapters:&lt;ul&gt;&lt;li&gt;GridView&lt;/li&gt;&lt;li&gt;Login&lt;/li&gt;&lt;li&gt;ChangePassword&lt;/li&gt;&lt;li&gt;PasswordRecovery&lt;/li&gt;&lt;li&gt;CreateUserWizard&lt;/li&gt;&lt;li&gt;LoginStatus&lt;/li&gt;&lt;/ul&gt;Nel sito di &lt;a href="http://www.asp.net/cssadapters/" title="Css Friendly Control Adapters"&gt;ASP.NET&lt;/a&gt;, trovate download, esempi e documentazione.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/CssFriendlyControlAdapters_Beta2.aspx#comm</comments><guid>/Blog/CssFriendlyControlAdapters_Beta2.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/147.aspx</trackback:ping></item><item><title>Informazioni sull'utente corrente in un HttpModule</title><link>http://www.peppedotnet.it/Blog/CurrentUserInHttpModule.aspx</link><pubDate>Fri, 08 Sep 2006 00:08:15 GMT</pubDate><description>Se vi è mai capitato di andare a leggere le informazioni riguardo l'utente corrente nell'evento BeginRequest di un HttpModule, vi sarete accorti che la proprietà HttpContext.Current.User è ancora a &lt;span style="color: Blue"&gt;null&lt;/span&gt;.
&lt;br /&gt;Questo perchè la richiesta è stata appena sottoposta ad ASP.NET, mentre, se provate a leggerne il contenuto dell'evento EndRequest, troverete tutte le informazioni sull'utente corrente (sempre che sia autenticato).
&lt;br /&gt;
&lt;br /&gt;Esiste un modo però, per arrivare lo stesso a quelle informazioni.
&lt;br /&gt;Dichiarando l'utilizzo della Forms Authentication in questo modo:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;authentication&lt;/span&gt;&lt;span style='color:#FF0000'&gt; mode&lt;span style='color:#0000FF'&gt;="Forms"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;forms&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;=".ASPXAUTH"&lt;/span&gt; loginUrl&lt;span style='color:#0000FF'&gt;="login.aspx"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;authentication&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;all'interno dell'HttpModule è possibile prelevare informazioni dal cookie di chi esegue la richiesta e creare un nuovo oggetto di tipo GenericPrincipal. Vediamo come:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;class&lt;/span&gt; DefaultHttpModule : IHttpModule
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Init(HttpApplication context)
&lt;br /&gt;    {
&lt;br /&gt;        context.BeginRequest += &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; EventHandler(context_BeginRequest);
&lt;br /&gt;    }
&lt;br /&gt;
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; context_BeginRequest(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;    {
&lt;br /&gt;        HttpContext context = HttpContext.Current;
&lt;br /&gt;        HttpCookie cookie = context.Request.Cookies.Get(&lt;span style="color: #A31515"&gt;".ASPXAUTH"&lt;/span&gt;);
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (cookie != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;) 
&lt;br /&gt;        {
&lt;br /&gt;            FormsAuthenticationTicket fat = FormsAuthentication.Decrypt(cookie.Value);
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;string&lt;/span&gt;[] roles = Roles.GetRolesForUser(fat.Name);
&lt;br /&gt;            GenericIdentity identity = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; GenericIdentity(fat.Name);
&lt;br /&gt;            GenericPrincipal principal = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; GenericPrincipal(identity, roles);
&lt;br /&gt;            &lt;span style="color: #008200"&gt;//...
&lt;/span&gt;
        }
&lt;br /&gt;    }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/CurrentUserInHttpModule.aspx#comm</comments><guid>/Blog/CurrentUserInHttpModule.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/146.aspx</trackback:ping></item><item><title>La propriet&#224; OnClientClick e il PostBack</title><link>http://www.peppedotnet.it/Blog/OnClientClickWithPostBack.aspx</link><pubDate>Mon, 28 Aug 2006 18:02:22 GMT</pubDate><description>Ne &lt;a href="http://www.peppedotnet.it/Blog/OnClientClick.aspx" title="Proprietà OnClientClick"&gt;avevo gia parlato&lt;/a&gt; di questa nuova proprietà dei controlli "Button".
&lt;br /&gt;Oggi mi sono accorto di un altra cosa.
&lt;br /&gt;Ho inserito come contenuto di questa proprietà il codice javascript necessario a far aprire un pop-up. Così facendo la nuova finestra veniva correttamente aperta, ma nella finestra padre veniva effettuato il postback della pagina.
&lt;br /&gt;Per eliminare questo comportamento, basta aggiungere un return false; dopo la chiamata di una qualsiasi funzione javascript.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;script&lt;/span&gt;&lt;span style='color:#FF0000'&gt; type&lt;span style='color:#0000FF'&gt;="text/javascript"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;       function apri(url,w,h)
&lt;br /&gt;       {
&lt;br /&gt;              mywin = window.open(url,"window", 'toolbar=0,
&lt;br /&gt;                                               location=0, directories=0, status=0, menubar=0,
&lt;br /&gt;                                               scrollbars=1, resizable=0, width='+w+', height='+h+'');
&lt;br /&gt;       }
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;script&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Button&lt;/span&gt;&lt;span style='color:#FF0000'&gt; id&lt;span style='color:#0000FF'&gt;="btn"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; Text&lt;span style='color:#0000FF'&gt;="Click me"&lt;/span&gt; &lt;br /&gt;OnClientClick&lt;span style='color:#0000FF'&gt;="apri('newPage.html', 200, 300); return false;"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Se invece, vogliamo riabilitare il PostBack nella pagina padre, basta o scrviere return true; o omettere del tutto il tipo di ritorno.
&lt;br /&gt;Se inoltre, vogliamo far partire il reload della pagina padre, una volta chiusa quella figlio, bisogna inserire questo codice nell'evento "unload" del body della pagina figlio:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;body&lt;/span&gt;&lt;span style='color:#FF0000'&gt; onunload&lt;span style='color:#0000FF'&gt;="opener.location.reload();"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;e un window.close() in un button qualsiasi per chiudere la finestra figlio:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Button&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="btn"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; Text&lt;span style='color:#0000FF'&gt;="Close and refresh parent"&lt;/span&gt; OnClientClick&lt;span style='color:#0000FF'&gt;="window.close();"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/OnClientClickWithPostBack.aspx#comm</comments><guid>/Blog/OnClientClickWithPostBack.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/143.aspx</trackback:ping></item><item><title>I composite controls</title><link>http://www.peppedotnet.it/Blog/CompositeControls.aspx</link><pubDate>Sun, 27 Aug 2006 19:49:44 GMT</pubDate><description>Con la versione 2.0 di ASP.NET è stata inserita una nuova classe nel namespace System.Web.UI.WebControls chiamata &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.compositecontrol.aspx" title="CompositeControl class"&gt;CompositeControl&lt;/a&gt;; ereditando da questa classe è possibile creare controlli compositi (quindi con altri controlli al loro interno) in maniera più semplificata rispetto a quanto si doveva fare nelle versioni precedenti del Framework.
&lt;br /&gt;Infatti, prima, si doveva ereditare dalla classe WebControl, implementare l'interfaccia INamingContainer ed assicurarsi a design-time che i controlli fossero stati creati correttamente attraverso il metodo EnsureChildControls().
&lt;br /&gt;Ora queste operazioni sono fatte direttamente dalla classe &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.compositecontrol.aspx" title="CompositeControl class"&gt;CompositeControl&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;E' questo un modo più semplice per creare controlli web compositi senza l'implementazione di user control .ascx; infatti ereditando da CompositeControl ci si può avvalere di queste funzionalità aggiuntive:&lt;ul&gt;&lt;li&gt;la possibilità di creare template&lt;/li&gt;&lt;li&gt;la possibilità di creare un supporto migliore per il design-time&lt;/li&gt;&lt;li&gt;la possibilità di inserirli all'interno della toolbox di Visual Studio&lt;/li&gt;&lt;li&gt;la possibilità di compilarli in una dll e riusarli in altri progetti, senza doversi "portare dietro" il file .ascx&lt;/li&gt;&lt;/ul&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/CompositeControls.aspx#comm</comments><guid>/Blog/CompositeControls.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/142.aspx</trackback:ping></item><item><title>Url Rewriting e la gestione del PostBack</title><link>http://www.peppedotnet.it/Blog/UrlRewritingAndPostBack.aspx</link><pubDate>Fri, 25 Aug 2006 11:52:39 GMT</pubDate><description>La tecnica dell'Url Rewriting, che permette all'applicazione di gestire le proprie risorse interne con nomi e indirizzi diversi da quelli specificati nella richiesta HTTP, può essere effettuata sia attraverso un HttpHandler che attraverso un HttpModule.
&lt;br /&gt;Analizzando la seconda alternativa, è necessario implementare l'event handler dell'evento BeginRequest e chiamare il metodo Context.RewritePath per far puntare il runtime di ASP.NET ad un'altra risorsa.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;class&lt;/span&gt; DefaultHttpModule : IHttpModule
&lt;br /&gt;{
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Init(HttpApplication context)
&lt;br /&gt;        {
&lt;br /&gt;                context.BeginRequest += &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; EventHandler(context_BeginRequest);
&lt;br /&gt;        }
&lt;br /&gt;
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; context_BeginRequest(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;        {
&lt;br /&gt;                &lt;span style="color: #008200"&gt;//...
&lt;/span&gt;
                HttpContext.Current.RewritePath(redirUrl);
&lt;br /&gt;        }
&lt;br /&gt;
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Dispose()
&lt;br /&gt;        {
&lt;br /&gt;        }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;E fin qui tutto bene.
&lt;br /&gt;Ora però, se proviamo a mettere in una delle pagine gestite dall'HttpModule un bel Button e proviamo a far scatenare il PostBack della pagina, vedrete che l'indirizzo mappato scompare e apparirà quello della risorsa vera e propria che gestisce la richiesta.
&lt;br /&gt;
&lt;br /&gt;Come fare ?
&lt;br /&gt;Durante l'evento Load della pagina, è d'obbligo utilizzare di nuovo il metodo RewritePath per far puntare il runtime all'url originale anche se è stato effettuato un postback della pagina.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;Context.RewritePath(Path.GetFileName(Request.RawUrl));&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Questa la linea di codice senza la quale l'Url Rewriting non funzionerebbe di fronte ad un PostBack della pagina.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/UrlRewritingAndPostBack.aspx#comm</comments><guid>/Blog/UrlRewritingAndPostBack.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/141.aspx</trackback:ping></item><item><title>Come validare il proprio sito ASP.NET, con il validator del W3C</title><link>http://www.peppedotnet.it/Blog/XhtmlValidatorW3C.aspx</link><pubDate>Wed, 21 Jun 2006 17:21:38 GMT</pubDate><description>E' ormai noto che ASP.NET 2 "produce" codice xhtml 1.0 valido.
&lt;br /&gt;Lo strumento ufficiale per effettuare la validità del codice dei propri siti web è il &lt;a href="http://validator.w3.org" title="W3C validator"&gt;validator&lt;/a&gt; offerto dal &lt;a href="http://www.w3.org" title="W3C"&gt;W3C&lt;/a&gt; (il WWW Consortium), associazione che si occupa di tutte le specifiche per i vari linguaggi utilizzati nel web.
&lt;br /&gt;Per far funzionare correttamente il validator con le nostre applicazioni ASP.NET, abbiamo bisogno di una piccola aggiunta al nostro progetto: un file di definizione .browser, che identifica l'agente proprio del validator del w3c.
&lt;br /&gt;Questo il contenuto di tale file, che va inserito all'interno della directory di ASP.NET 2 "App_Browsers":
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;browsers&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;  &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;browser&lt;/span&gt;&lt;span style='color:#FF0000'&gt; id&lt;span style='color:#0000FF'&gt;="W3C_Validator"&lt;/span&gt; parentID&lt;span style='color:#0000FF'&gt;="default"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;identification&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;userAgent&lt;/span&gt;&lt;span style='color:#FF0000'&gt; match&lt;span style='color:#0000FF'&gt;="^W3C_Validator"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;identification&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;capabilities&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;capability&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="browser"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="W3C Validator"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;capability&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="ecmaScriptVersion"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="1.2"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;capability&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="javascript"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;capability&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="supportsCss"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;capability&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="tables"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;capability&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="tagWriter"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="System.Web.UI.HtmlTextWriter"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;capability&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="w3cdomversion"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="1.0"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;capabilities&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;  &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;browser&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;browsers&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;La soluzione ci viene data in &lt;a href="http://msdn2.microsoft.com/en-us/library/exc57y7e.aspx" title="XHTML e ASP.NET 2"&gt;questo articolo&lt;/a&gt; riguardante l'utilizzo dell'XHTML in applicazioni ASP.NET 2.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/XhtmlValidatorW3C.aspx#comm</comments><guid>/Blog/XhtmlValidatorW3C.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/138.aspx</trackback:ping></item><item><title>Implementare paging e sorting di una GridView bindata senza un data source control</title><link>http://www.peppedotnet.it/Blog/PageSortGridView.aspx</link><pubDate>Mon, 19 Jun 2006 15:50:26 GMT</pubDate><description>La GridView è sicuramente il controllo più complesso che è stato aggiunto nella versione 2.0 di ASP.NET, poichè ti permette di realizzare con pochi click funzionalità di paging e sorting dei dati; questi dati devono però essere presi da dei Data Source Control. 
&lt;br /&gt;Se invece, vogliamo effettuare un databind "a mano" della GridView, dobbiamo implementare sia i meccanismi di paging che quelli di sorting. Se questo non viene fatto, e viene messa a True la proprietà AllowPaging, verrà sollevata un'eccezione con questo messaggio: 
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: red; font-style: italic; padding-left: 15px"&gt;The GridView 'GridViewID' fired event PageIndexChanging which wasn't handled&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;Per evitare questo banale errore, bisogna implementare gli event handler per gli eventi Sorting e PageIndexChanging. 
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:GridView&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="GridView1"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;
&lt;br /&gt;    AutoGenerateColumns&lt;span style='color:#0000FF'&gt;="false"&lt;/span&gt; 
&lt;br /&gt;    OnPageIndexChanging&lt;span style='color:#0000FF'&gt;="GridView1_PageIndexChanging"&lt;/span&gt;
&lt;br /&gt;    OnSorting&lt;span style='color:#0000FF'&gt;="GridView1_Sorting"&lt;/span&gt;
&lt;br /&gt;    PageSize&lt;span style='color:#0000FF'&gt;="15"&lt;/span&gt;
&lt;br /&gt;    AllowPaging&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;
&lt;br /&gt;    AllowSorting&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; GridView1_PageIndexChanging(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, GridViewPageEventArgs e)
&lt;br /&gt;{
&lt;br /&gt;        GridView1.PageIndex = e.NewPageIndex;
&lt;br /&gt;        GridView1.DataBind();
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; GridView1_Sorting(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, GridViewSortEventArgs e)
&lt;br /&gt;{
&lt;br /&gt;    DataTable dt = GridView1.DataSource &lt;span style="color: #0000FF"&gt;as&lt;/span&gt; DataTable;
&lt;br /&gt;
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (dt != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;    {
&lt;br /&gt;        DataView dv = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; DataView(dt);
&lt;br /&gt;        dv.Sort = String.Format(&lt;span style="color: #A31515"&gt;"{0} {1}"&lt;/span&gt;, e.SortExpression, ConvertSort(e.SortDirection));
&lt;br /&gt;
&lt;br /&gt;        GridView1.DataSource = dv;
&lt;br /&gt;        GridView1.DataBind();
&lt;br /&gt;    }
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; ConvertSort(SortDirection sortDirection)
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; m_SortDirection = String.Empty;
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;switch&lt;/span&gt; (sortDirection)
&lt;br /&gt;    {
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; SortDirection.Ascending:
&lt;br /&gt;            m_SortDirection = &lt;span style="color: #A31515"&gt;"ASC"&lt;/span&gt;;
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; SortDirection.Descending:
&lt;br /&gt;            m_SortDirection = &lt;span style="color: #A31515"&gt;"DESC"&lt;/span&gt;;
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;    }
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; m_SortDirection;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;In questo modo possiamo sfruttare le funzionalità di sorting e paging del controllo di GridView, anche se non lo colleghiamo ad un data source control e se effettuiamo un databind esplicito via codice o tramite le nostre classi di buisiness.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/PageSortGridView.aspx#comm</comments><guid>/Blog/PageSortGridView.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/136.aspx</trackback:ping></item><item><title>Errore nel rendering dei controls del proprio web site</title><link>http://www.peppedotnet.it/Blog/ErrorRenderingControls.aspx</link><pubDate>Fri, 05 May 2006 19:42:19 GMT</pubDate><description>Se, una volta aver aggiunto un vostro server control nella directory App_Code, e averlo registrato nel web.config specificando tagPrefix e namespace, vi trovate di fronte ad un errore di rendering dei controls a design time, nelle pagine del vostro web site, non vi allarmate.
&lt;br /&gt;Questo succede perchè non avete specificato il contenuto dell'attributo Assembly.
&lt;br /&gt;Solamente che, a causa del nuovo modello di pre-compilazione, il codice inserito nella directory App_Code, non è all'interno di un Assembly.
&lt;br /&gt;ASP.NET 2, per ovviare a questo problema, da la possibilità di specificare come Assembly direttamente la directory App_Code, in questi due modi:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#FF0000'&gt; theme&lt;span style='color:#0000FF'&gt;="PeppeDotNetTheme"&lt;/span&gt; enableViewState&lt;span style='color:#0000FF'&gt;="false"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;controls&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; tagPrefix&lt;span style='color:#0000FF'&gt;="pep"&lt;/span&gt; namespace&lt;span style='color:#0000FF'&gt;="Peppe.WebControls"&lt;/span&gt; assembly&lt;span style='color:#0000FF'&gt;="App_Code"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;controls&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;oppure:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#FF0000'&gt; theme&lt;span style='color:#0000FF'&gt;="PeppeDotNetTheme"&lt;/span&gt; enableViewState&lt;span style='color:#0000FF'&gt;="false"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;controls&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; tagPrefix&lt;span style='color:#0000FF'&gt;="pep"&lt;/span&gt; namespace&lt;span style='color:#0000FF'&gt;="Peppe.WebControls"&lt;/span&gt; assembly&lt;span style='color:#0000FF'&gt;="__code"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;controls&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;In questo modo potete registrare i server controls presenti nella directory App_Code all'interno del web.config, utilizzarli in tutte le pagine della vostra applicazine web e avvalersi anche del supporto dell'intellisense di Visual Studio.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ErrorRenderingControls.aspx#comm</comments><guid>/Blog/ErrorRenderingControls.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/128.aspx</trackback:ping></item><item><title>App_Offline.htm</title><link>http://www.peppedotnet.it/Blog/AppOffline.aspx</link><pubDate>Thu, 04 May 2006 17:45:15 GMT</pubDate><description>Una nuova features introdotta in ASP.NET 2.0 è rappresentata dal file App_Offline.htm, file che inserito all'interno della root della nostra applicazione web la fa passare alla modolità off-line.
&lt;br /&gt;La presenza di quel file causa lo shutdown di ASP.NET e il redirect in automatico di tutte le richieste a pagine dinamiche al file App_Config.
&lt;br /&gt;L'unica cosa cui stare attenti è la pesantezza di questo file. Infatti se non vengono superati i 512 bytes si incorre nell'http error lanciato in automatico da Explorer.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/AppOffline.aspx#comm</comments><guid>/Blog/AppOffline.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/127.aspx</trackback:ping></item><item><title>Sicurezza nel sistema di Site Navigation di ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/SiteNavigationSecurity.aspx</link><pubDate>Thu, 04 May 2006 15:50:09 GMT</pubDate><description>Attraverso l'impostazione dei provider per la gestione di utenti e ruoli, è possibile filtrare singoli elementi di una Site Map in base a specifiche regole di autorizzazione.
&lt;br /&gt;I passi da seguire sono due:&lt;ol&gt;&lt;li&gt;Inserire il provider relativo al proprio file .sitemap, nell'elenco dei SiteMap provider presente nel web.config e settare a true la proprietà securityTrimmingEnabled
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMap&lt;/span&gt;&lt;span style='color:#FF0000'&gt; defaultProvider&lt;span style='color:#0000FF'&gt;="menu"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;providers&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="menu"&lt;/span&gt; type&lt;span style='color:#0000FF'&gt;="System.Web.XmlSiteMapProvider"&lt;/span&gt;
&lt;br /&gt;           siteMapFile&lt;span style='color:#0000FF'&gt;="~/Web.sitemap"&lt;/span&gt; securityTrimmingEnabled&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;providers&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMap&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Inserire l'attributo roles in ogni elemento di tipo SiteMapNode.&lt;/li&gt;&lt;/ol&gt;Questo attributo va valorizzato o con l'elenco degli ruoli abilitati a vedere quel nodo o con la wildcard (*), che definisce il nodo come visibile a tutti.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;?&lt;/span&gt;&lt;span style='color:#800000'&gt;xml&lt;/span&gt;&lt;span style='color:#FF0000'&gt; version&lt;span style='color:#0000FF'&gt;="1.0"&lt;/span&gt; encoding&lt;span style='color:#0000FF'&gt;="utf-8"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;?&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMap&lt;/span&gt;&lt;span style='color:#FF0000'&gt; xmlns&lt;span style='color:#0000FF'&gt;="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMapNode&lt;/span&gt;&lt;span style='color:#FF0000'&gt; title&lt;span style='color:#0000FF'&gt;="Menu"&lt;/span&gt; roles&lt;span style='color:#0000FF'&gt;="*"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMapNode&lt;/span&gt;&lt;span style='color:#FF0000'&gt; url&lt;span style='color:#0000FF'&gt;="~/default.aspx"&lt;/span&gt; title&lt;span style='color:#0000FF'&gt;="Home"&lt;/span&gt; roles&lt;span style='color:#0000FF'&gt;="*"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMapNode&lt;/span&gt;&lt;span style='color:#FF0000'&gt; url&lt;span style='color:#0000FF'&gt;="~/Manager/default.aspx"&lt;/span&gt; title&lt;span style='color:#0000FF'&gt;="Manager page"&lt;/span&gt; roles&lt;span style='color:#0000FF'&gt;="Admin, Manager"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMapNode&lt;/span&gt;&lt;span style='color:#FF0000'&gt; url&lt;span style='color:#0000FF'&gt;="~/Admin/default.aspx"&lt;/span&gt; title&lt;span style='color:#0000FF'&gt;="Admin page"&lt;/span&gt; roles&lt;span style='color:#0000FF'&gt;="Admin"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMapNode&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;siteMap&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Facile all'uso e veramente utile !</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/SiteNavigationSecurity.aspx#comm</comments><guid>/Blog/SiteNavigationSecurity.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/126.aspx</trackback:ping></item><item><title>La propriet&#224; OnClientClick</title><link>http://www.peppedotnet.it/Blog/OnClientClick.aspx</link><pubDate>Sat, 29 Apr 2006 12:46:59 GMT</pubDate><description>Nei controlli di tipo "button" (quindi su LinkButton, Button e ImageButton) è stata aggiunta una proprietà molto utile, la proprietà OnClientClick, che permette di specificare del codice javascript che va eseguito, lato client ovviamente, al click sull'oggetto.
&lt;br /&gt;Attraverso questa nuova features possiamo, per esempio, aggiungere un messaggio di conferma per eseguire effettivamente un comando. L'utilità di questo esempio, la possiamo riscontrare nell'utilizzo del controllo GridView, controllo che sicuramente è uno tra i più potenti, ma che non ha implementato meccanismi di conferma per l'esecuzione dei comandi di update, delete o insert.
&lt;br /&gt;Con questa proprietà, risulta veramente facile, aggiungere conferme all'interno delle nostre GridView:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:GridView&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="GridView1"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; DataSourceID&lt;span style='color:#0000FF'&gt;="ObjectDataSource1"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;Columns&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:BoundField&lt;/span&gt;&lt;span style='color:#FF0000'&gt; DataField&lt;span style='color:#0000FF'&gt;="Nome"&lt;/span&gt; HeaderText&lt;span style='color:#0000FF'&gt;="Nome"&lt;/span&gt; SortExpression&lt;span style='color:#0000FF'&gt;="Nome"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TemplateField&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;            &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;ItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;                &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:LinkButton&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="lnkDelete"&lt;/span&gt; Text&lt;span style='color:#0000FF'&gt;="Delete"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;
&lt;br /&gt;                    CommandName&lt;span style='color:#0000FF'&gt;="Delete"&lt;/span&gt; OnClientClick&lt;span style='color:#0000FF'&gt;="return confirm('Sicuro ?');"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;            &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;ItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TemplateField&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:CommandField&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ShowEditButton&lt;span style='color:#0000FF'&gt;="True"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;Columns&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:GridView&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/OnClientClick.aspx#comm</comments><guid>/Blog/OnClientClick.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/125.aspx</trackback:ping></item><item><title>Il cross-page postback in presenza di una master page</title><link>http://www.peppedotnet.it/Blog/PreviousPage.aspx</link><pubDate>Sun, 26 Mar 2006 23:38:21 GMT</pubDate><description>Il cross-page postback è un'altra delle novità introdotte con la versione 2.0 di ASP.NET, che ci permette di effettuare un postback su di una seconda pagina senza effettuare manualmente un redirect. In questo modo è possibile passare delle informazioni da una pagina all'altra senza l'utilizzo della sessione o di parametri di querystring.
&lt;br /&gt;La proprietà che ci permette di prelevare queste informazioni è la proprietà PreviousPage, mentre la proprietà PostbackUrl della classe Button, ci fa specificare l'url della pagina sulla quale effettuare il postback.
&lt;br /&gt;Vediamo un esempio:
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;pag1.aspx&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;Ricerca:&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#FF0000'&gt; id&lt;span style='color:#0000FF'&gt;="txtRicerca"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Button&lt;/span&gt;&lt;span style='color:#FF0000'&gt; id&lt;span style='color:#0000FF'&gt;="btn"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; PostBackUrl&lt;span style='color:#0000FF'&gt;="~/page2.aspx"&lt;/span&gt; Text&lt;span style='color:#0000FF'&gt;="Ricerca"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;page2.aspx.cs&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (!IsPostBack)
&lt;br /&gt;    {
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (PreviousPage != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;        {
&lt;br /&gt;            TextBox txtSearch = (TextBox)PreviousPage.FindControl(&lt;span style="color: #848284"&gt;"txtSearch"&lt;/span&gt;);
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;if&lt;/span&gt;(txtSearch != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;                DoSearch(txtSearch.Text);
&lt;br /&gt;        }
&lt;br /&gt;    }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Cosa succede invece se la nostra pag1 eredita da una masterpage ?
&lt;br /&gt;La riga
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;TextBox txtSearch = (TextBox)PreviousPage.FindControl(&lt;span style="color: #848284"&gt;"txtSearch"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Ci ritorna un bell'errore. Questo perchè la nostra textbox di ricerca, non è più direttamente all'interno della pagina, ma è all'interno di un controllo ContentPlaceHolder. Quindi, dobbiamo prima prelevare l'oggetto contenitore, e poi il suo contenuto (cioè la nostra textbox). Vediamo come:
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;page1.aspx&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;%@&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Page Language&lt;span style='color:#0000FF'&gt;="C#"&lt;/span&gt; MasterPageFile&lt;span style='color:#0000FF'&gt;="~/site.master"&lt;/span&gt; ... %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Content&lt;/span&gt;&lt;span style='color:#FF0000'&gt; ID&lt;span style='color:#0000FF'&gt;="Content1"&lt;/span&gt; ContentPlaceHolderID&lt;span style='color:#0000FF'&gt;="center"&lt;/span&gt; Runat&lt;span style='color:#0000FF'&gt;="Server"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    Ricerca:&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:TextBox&lt;/span&gt;&lt;span style='color:#FF0000'&gt; id&lt;span style='color:#0000FF'&gt;="txtRicerca"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Button&lt;/span&gt;&lt;span style='color:#FF0000'&gt; id&lt;span style='color:#0000FF'&gt;="btn"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt; PostBackUrl&lt;span style='color:#0000FF'&gt;="~/page2.aspx"&lt;/span&gt; Text&lt;span style='color:#0000FF'&gt;="Ricerca"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;asp:Content&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;page2.aspx.cs&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (!IsPostBack)
&lt;br /&gt;    {
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (PreviousPage != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;        {
&lt;br /&gt;            ContentPlaceHolder c = (ContentPlaceHolder)PreviousPage.Master.FindControl(&lt;span style="color: #848284"&gt;"center"&lt;/span&gt;);
&lt;br /&gt;            TextBox txtSearch = (TextBox)c.FindControl(&lt;span style="color: #848284"&gt;"txtSearch"&lt;/span&gt;);
&lt;br /&gt;            &lt;span style="color: #0000FF"&gt;if&lt;/span&gt;(txtSearch != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;                DoSearch(txtSearch.Text);
&lt;br /&gt;        }
&lt;br /&gt;    }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/PreviousPage.aspx#comm</comments><guid>/Blog/PreviousPage.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/124.aspx</trackback:ping></item><item><title>Come registrare i vostri user control una volta per tutte le pagine</title><link>http://www.peppedotnet.it/Blog/RegistrareUserControls.aspx</link><pubDate>Sat, 18 Feb 2006 19:11:13 GMT</pubDate><description>Questa è una delle novità introdotte con ASP.NET 2.0; possiamo registrare tutti i server control che vogliamo inserire nella nostra applicazione web, un'unica volta (nel web.config) per tutte le pagine dell'applicazione.
&lt;br /&gt;E' possibile sia registrare gli user control (file .ascx) uno ad uno:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;controls&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; tagPrefix&lt;span style='color:#0000FF'&gt;="pep"&lt;/span&gt; tagName&lt;span style='color:#0000FF'&gt;="footer"&lt;/span&gt; src&lt;span style='color:#0000FF'&gt;="~/UserControls/footer.ascx"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; tagPrefix&lt;span style='color:#0000FF'&gt;="pep"&lt;/span&gt; tagName&lt;span style='color:#0000FF'&gt;="header"&lt;/span&gt; src&lt;span style='color:#0000FF'&gt;="~/UserControls/header.ascx"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;controls&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;sia registrare un intero namespace di server control:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;controls&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; tagPrefix&lt;span style='color:#0000FF'&gt;="pep"&lt;/span&gt; assembly&lt;span style='color:#0000FF'&gt;="Peppe"&lt;/span&gt; namespace&lt;span style='color:#0000FF'&gt;="Peppe.Web.UI.WebControls"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;controls&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Vi risulterà davvero utile !</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/RegistrareUserControls.aspx#comm</comments><guid>/Blog/RegistrareUserControls.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/122.aspx</trackback:ping></item><item><title>Pagine ASP.NET xhtml strict</title><link>http://www.peppedotnet.it/Blog/XhtmlStrictDocType.aspx</link><pubDate>Sat, 17 Dec 2005 22:42:01 GMT</pubDate><description>Una delle novità introdotte con la versione 2.0 di ASP.NET è la possibilità di creare pagine xhtml valide. Tutti i web control infatti "sputano" fuori del codice conforme alle specifiche dettate dal W3C per quanto riguardo l'xhtml. Le specifiche seguite, però, sono quelle della versione Transitional di xhtml e non della versione Strict, che contiene un pò più di vincoli.
&lt;br /&gt;Possiamo però ovviare a questo problema inserendo all'interno del web.config questa riga:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;xhtmlConformance&lt;/span&gt;&lt;span style='color:#FF0000'&gt; mode&lt;span style='color:#0000FF'&gt;="Strict"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;per fare in modo che i web controls renderizzino codice xhtml 1.0 strict valido.
&lt;br /&gt;L'unica cosa che rimane da fare è quella di cambiare la dichiarazione del DocType nei template di visual studio riguardanti la creazione di nuove web forms, giusto per non dover fare a mano la sostituzione del doctype ad ogni pagina appena creata.
&lt;br /&gt;I template relativi alle web forms stanno all'interno di un file zip (WebForm.zip), in queste directory:
&lt;br /&gt;
&lt;br /&gt;C:\Programmi\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates\Web\CSharp\1033
&lt;br /&gt;C:\Programmi\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates\Web\VisualBasic\1033
&lt;br /&gt;
&lt;br /&gt;e all'interno di un secondo file zip (WebApplication.zip), in queste directory:
&lt;br /&gt;
&lt;br /&gt;C:\Programmi\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Web\CSharp\1033
&lt;br /&gt;C:\Programmi\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Web\VisualBasic\1033
&lt;br /&gt;
&lt;br /&gt;Una volta che avete modificato il file Default.aspx con il doctype desiderato, salvate e aggiungete le modifiche al file zip. Per apprezzare i cambiamenti va chiuso e riaperto Visual Studio.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/XhtmlStrictDocType.aspx#comm</comments><guid>/Blog/XhtmlStrictDocType.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/106.aspx</trackback:ping></item><item><title>Gestione delle connection strings con ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/ConnectionStrings.aspx</link><pubDate>Sat, 03 Dec 2005 12:16:44 GMT</pubDate><description>Per la gestione delle connection strings, che prima dovevamo mettere o nei file di resource del progetto o come chiave nell'elemento appSettings, ASP.NET 2.0 ha inserito un nuovo gruppo di elementi all'interno del web.config, utile alla gestione di più stringhe di connessione.
&lt;br /&gt;Ecco la sintassi:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;configuration&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;connectionStrings&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;clear&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="accessStrConn"&lt;/span&gt; connectionString&lt;span style='color:#0000FF'&gt;="..."&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="sqlServerStrConn"&lt;/span&gt; connectionString&lt;span style='color:#0000FF'&gt;="..."&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;   &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;connectionStrings&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;system.web&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;      ...
&lt;br /&gt;      &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;system.web&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;configuration&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Per recuperare poi via codice il contenuto di questi elementi, è stata aggiunta la classe &lt;a href="http://msdn2.microsoft.com/en-us/library/ms134260(en-us,VS.80).aspx" title="ConfigurationManager class"&gt;ConfigurationManager&lt;/a&gt;, che sostituisce la vecchia &lt;a href="http://msdn2.microsoft.com/en-us/library/kw224t90(en-US,VS.80).aspx" title="ConfigurationSettings class"&gt;ConfigurationSettings&lt;/a&gt;, che non è più nell'assembly System.Configuration, ma bensi' direttamente nell'assembly System.dll; la classe ConfigurationManager va utilizzata in questo modo:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; strConn = ConfigurationManager.ConnectionStrings[&lt;span style="color: #848284"&gt;"slServerStrConn"&lt;/span&gt;].ConnectionString);&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ConnectionStrings.aspx#comm</comments><guid>/Blog/ConnectionStrings.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/104.aspx</trackback:ping></item><item><title>Link utili su ASP.NET 2.0</title><link>http://www.peppedotnet.it/Blog/Msdn_links.aspx</link><pubDate>Wed, 31 Aug 2005 01:30:25 GMT</pubDate><description>Ecco un pò di link utili per iniziare a capire le nuove funzionalità della versione 2.0 di ASP.NET; interessantissimo è quello su come creare siti web che aderiscono agli standard web. Significa cioè che da questa nuova versione si possono scrivere direttamente pagine XHTML valide, senza ricorrere (com'è invece per la 1.1) a filtri, attivati tramite HttpModule, per ripulire il codice html prodotto.
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://beta.asp.net/QuickStartv20/aspnet/default.aspx" title="ASP.NET 2.0 QuickStart tutorial"&gt;ASP.NET 2.0 QuickStart tutorial&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/asp.net/beta2/" title="ASP.NET 2.0 overview"&gt;ASP.NET 2.0 overview&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/ASPNETusStan.asp" title="Building ASP.NET 2.0 Web Sites Using Web Standards"&gt;Building ASP.NET 2.0 Web Sites Using Web Standards&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/asp.net/beta2/default.aspx?pull=/library/en-us/dnvs05/html/treeview.asp" title="Introducing the ASP.NET 2.0 TreeView and Menu Controls"&gt;Introducing the ASP.NET 2.0 TreeView and Menu Controls&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/asp.net/beta2/data/default.aspx?pull=/library/en-us/dnvs05/html/grddetview.asp" title="Introducing the ASP.NET 2.0 GridView and DetailsView Controls"&gt;Introducing the ASP.NET 2.0 GridView and DetailsView Controls&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/asp.net/beta2/ui/default.aspx?pull=/library/en-us/dnvs05/html/themes.asp" title="Create Web Application Themes in ASP.NET 2.0"&gt;Create Web Application Themes in ASP.NET 2.0&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/asp.net/beta2/ui/default.aspx?pull=/library/en-us/dnvs05/html/masterpages.asp" title="Master the Look of Your Site: ASP.NET 2.0 Master Pages"&gt;Master the Look of Your Site: ASP.NET 2.0 Master Pages&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/asp.net/beta2/migrating/default.aspx?pull=/library/en-us/dnvs05/html/migratefromaspnetto2.asp" title="Migrate from ASP.NET 1.x to ASP.NET 2.0"&gt;Migrate from ASP.NET 1.x to ASP.NET 2.0&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Io me ne sono gia stampati e letti un pò, e devo dire che le novità sono tante e molto belle !</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/Msdn_links.aspx#comm</comments><guid>/Blog/Msdn_links.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET 2.0</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/62.aspx</trackback:ping></item></channel></rss>