<?xml version="1.0" encoding="iso-8859-15"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><channel><title>blogs.ASPItalia.com</title><link>http://blogs.aspitalia.com//ricciolo//</link><description>blogs.ASPItalia.com</description><language>it-it</language><copyright>1998-2013 ASPItalia.com/blogs.ASPItalia.com</copyright><generator>Generated by feed.ASPItalia.com 'Cortana' 2013.5.16</generator><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><sy:updateBase>1998-01-01T12:00+00:00</sy:updateBase><lastBuildDate>Tue, 28 Aug 2007 13:46:00 GMT</lastBuildDate><image><title>blogs.ASPItalia.com</title><url>http://gui.aspitalia.com/images/aspitalia/syndication.gif</url><link>http://blogs.aspitalia.com//ricciolo//</link></image><item><title>Silverlight e versioni CLR</title><link>http://blogs.aspitalia.com/ricciolo/post2110/Silverlight-Versioni-CLR.aspx</link><pubDate>Tue, 28 Aug 2007 13:46:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2110" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;E' un po' che voglio scrivere questo post, perché il dubbio mi era venuto e avevo approfondito il discorso, perciò volevo rendervi partecipi.&lt;/p&gt;&lt;p&gt;Ai &lt;a href="http://www.communitydays.it/events/communitydays2007milano.aspx"&gt;Community Days 2&lt;/a&gt; qualcuno aveva chiesto se si poteva sfruttare il CLR di &lt;strong&gt;Silverlight&lt;/strong&gt; anche fuori dal browser. In teoria la risposta è sì, perché il CLR è una versione 2.1, basata sulla 2.0 appunto, ma limitata togliendo classi considerate superflue per browser client o eliminando overloads a metodi che occupano istruzioni IL solo per favorire il programmatore. Alcune classi invece sono rimaste. Per esempio mscorlib ha &lt;strong&gt;System.Console&lt;/strong&gt;, la reflection, la parte di serializzazione, collezioni ecc.&lt;/p&gt;&lt;p&gt;A confermare la mia ipotesi è &lt;a href="http://weblogs.asp.net/nunitaddin/archive/2007/05/10/silverlight-console-applications.aspx"&gt;questo tizio&lt;/a&gt; che prendendo in esempio un'applicazione di Rotor ha creato una Console application runner di nome agx.exe.&lt;/p&gt;&lt;p&gt;Per quanto riguarda invece avere un exe a se stante, come si può avere in Flash, Silverlight è un ActiveX di nome &lt;strong&gt;AgControl Type Library&lt;/strong&gt; in npctrl.dll che può essere usato in applicazioni standalone. A parte che non vedo il motivo di usare Silverlight (a questo punto meglio usare il .NET Framework normale), nasce comunque un problema serio.&lt;/p&gt;&lt;p&gt;Per ogni processo è possibile avere funzionante un'unica versione del Framework, perciò in scenari di addin e plugin succede che se una dll sviluppata per la versione 1.x viene caricata in un processo con attivo il CLR 2.0, questa viene forzatamente eseguita con la 2.0. In questo caso non dovrebbero esserci problemi; ce ne sono nel caso avvenga il contrario, con un &amp;quot;downgrade&amp;quot; di un componente dalla versione 2.0 alla 1.x. Questo è un problema non di poco conto e che fino adesso forse ha frenato lo sviluppo di estensioni per applicativi come la shell o Internet Explorer.&lt;br /&gt;Con Silverlight inoltre, questa complicazione si fa ancora più probabile: poniamo di aprire in IE una pagina con Silverlight 1.0, poi un'altra con Silverlight 1.1, poi in un futuro un'altra con un ipotetico Silverlight 2.0. Quale versione del CLR parte? La risposta sarebbe la versione del primo &amp;quot;applicativo&amp;quot; che è stato carico. &lt;/p&gt;&lt;p&gt;Fortunamente questo problema è stato risolto e a partire da Silverlight, quindi anche con i futuri CLR, due runtime possono convivere nel medesimo processo. Silverlight in particolare può coesistere con gli attuali CLR 1.0, 1.1 e 2.0. Ogni CLR lavora per conto suo, ha un suo GC e non condivide la memoria. In &lt;a href="http://blogs.msdn.com/jasonz/archive/2007/05/10/side-by-side-in-process-clrs-start-with-silverlight.aspx"&gt;questo post&lt;/a&gt; viene spiegata la soluzione tramite un video.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.0/" rel="tag"&gt;.NET Framework 3.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.5/" rel="tag"&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Silverlight/" rel="tag"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Silverlight_2.0/" rel="tag"&gt;Silverlight 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/XAML/" rel="tag"&gt;XAML&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post2110/Silverlight-Versioni-CLR.aspx"&gt;&lt;em&gt;Silverlight e versioni CLR&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, .NET Framework, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, Silverlight, Silverlight 2.0, XAML</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post2110/Silverlight-Versioni-CLR.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post2110/Silverlight-Versioni-CLR.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS2110.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2110</trackback:ping></item><item><title>Intercettare il reciclo di un&amp;#39;applicazione ASP.NET</title><link>http://blogs.aspitalia.com/ricciolo/post1749/Intercettare-Reciclo-Applicazione-ASP.NET.aspx</link><pubDate>Tue, 26 Sep 2006 07:27:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1749" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Qualche tempo fa &lt;a href="http://blogs.aspitalia.com/ricciolo/post416.aspx"&gt;parlai&lt;/a&gt; del reciclo degli AppDomain delle applicazioni ASP.NET. Sviluppando &lt;a href="http://lab.aspitalia.com/41/ASP.NET-Windows-Presentation-Foundation-WebXaml.aspx" target="_blank"&gt;WebXaml&lt;/a&gt; ho avuto la necessità di chiudere delle risorse durante la chiusura dell'AppDomain. Non esiste (almeno che io conosca) un modo per conoscere quando ciò avviene; intercettare l'evento DomainUnload della classe AppDomain non è appropriato perché è troppo tardi per eseguire le operazioni di scarico.&lt;/p&gt;&lt;p&gt;Possiamo però implementare l'interfaccia &lt;strong&gt;IRegisteredObject&lt;/strong&gt; e registrarla in qualsiasi momento tramite &lt;strong&gt;HostingEnvironment.RegisterObject&lt;/strong&gt;. Quando viene richiesto al runtime di ASP.NET di scaricare l'AppDomain, viene chiamato, per tutte le classi registrate, il metodo Stop(false). Successivamente viene accodato nel thread pool un ulteriore chiamata al metodo Stop(true) e finalmente scaricato l'AppDomain con Unload.&lt;br /&gt;&lt;div class="codebox"&gt;&lt;pre&gt;public class MyClass : IRegisteredObject&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;{&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void IRegisteredObject.Stop(bool immediate)&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Disposing...&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HostingEnvironment.UnregisterObject(this);&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;E' nella prima chiamata che ho trovato il punto più appropriato per chiudere le mie risorse.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: mi è venuto in mente che ovviamente esiste l'evento Application_OnEnd, ma va inserito nel global.asax e non è quindi &amp;quot;pluggabile&amp;quot;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1749/Intercettare-Reciclo-Applicazione-ASP.NET.aspx"&gt;&lt;em&gt;Intercettare il reciclo di un&amp;#39;applicazione ASP.NET&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, .NET Framework, .NET Framework 2.0, ASP.NET, ASP.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1749/Intercettare-Reciclo-Applicazione-ASP.NET.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1749/Intercettare-Reciclo-Applicazione-ASP.NET.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1749.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1749</trackback:ping></item><item><title>User e custom controls, WebParts</title><link>http://blogs.aspitalia.com/ricciolo/post1642/User-Custom-Controls-WebParts.aspx</link><pubDate>Thu, 15 Jun 2006 18:52:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1642" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Ed anche questo capitolo è terminato. Mi rendo conto che gli argomenti proposti in questo capitolo sono molto vasti. &lt;/p&gt;&lt;p&gt;Per user controls credo aver avuto un bel approccio pratico ad esigenze frequenti. Sui custom controls esistono libri interi, perché volendo ci sarebbe da discutere per ogni controllo presente in ASP.NET 2.0, studiando come hanno implementato data binding, ViewState, datasource ed integrazione con Visual Studio 2005. Per questi ho cercato quindi di gettare le basi utili per sviluppare un controllo personalizzato, in particolar modo quelli composti che nella mia esperienza mi sono ritrovato maggiormente a sviluppare.&lt;/p&gt;&lt;p&gt;Stiamo un po' riorganizzando i capitoli per delineare meglio un percorso logico che congiunga gli articoli, quindi è facile che troverete i capitoli spostarsi o cambiare di nome.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0_per_tutti/" rel="tag"&gt;ASP.NET 2.0 per tutti&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Custom_Control/" rel="tag"&gt;Custom Control&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/User_Control/" rel="tag"&gt;User Control&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1642/User-Custom-Controls-WebParts.aspx"&gt;&lt;em&gt;User e custom controls, WebParts&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, ASP.NET, ASP.NET 2.0, ASP.NET 2.0 per tutti, Custom Control, User Control</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1642/User-Custom-Controls-WebParts.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1642/User-Custom-Controls-WebParts.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1642.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1642</trackback:ping></item><item><title>Capitolo 10 tutto su ObjectDataSource</title><link>http://blogs.aspitalia.com/ricciolo/post1625/Capitolo-10-ObjectDataSource.aspx</link><pubDate>Tue, 06 Jun 2006 21:19:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1625" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;O quasi... E' l'argomento principe poiché ormai tutti sappiamo che il miglior approccio all'accesso ai dati è interfacciarsi con le classi business.&lt;br /&gt;L'intero capitolo credo che abbia abbastanza un approccio pratico, basato su esigenze che si possono incontrare, come le master/details e dò spazio anche ad un &lt;strong&gt;DataControlFied&lt;/strong&gt; personalizzato.&lt;/p&gt;&lt;p&gt;Purtroppo non ha trovato spazio alla creazione di un DataSource personalizzato. E' piuttosto lungo da spiegare in effetti e soprattutto non è una cosa da tutti i giorni.&lt;br /&gt;Il problema è che mi sono preso così bene che ho sviluppato un &lt;strong&gt;FileSystemDataSource&lt;/strong&gt;, per l'accesso al file system, e un &lt;strong&gt;FtpDataSource&lt;/strong&gt;, per l'accesso ad un host FTP. Entrambi che implementano sia &lt;strong&gt;IDataSource&lt;/strong&gt; che &lt;strong&gt;IHierarchicalDataSource&lt;/strong&gt; e quindi utilizzabili sia con TreeView/Menu, sia con GridView e fratelli.&lt;/p&gt;&lt;p&gt;Probabilmente li lascerò comunque nel codice che daremo insieme al libro.&lt;/p&gt;&lt;p&gt;Il loro utilizzo è alquanto semplice&lt;/p&gt;&lt;div class="codebox"&gt;&lt;pre&gt;&amp;amp;lt;aspitalia:FtpDataSource ID=&amp;amp;quot;ftp1&amp;amp;quot; runat=&amp;amp;quot;server&amp;amp;quot; UsePassive=&amp;amp;quot;true&amp;amp;quot; Host=&amp;amp;quot;ftp://localhost&amp;amp;quot; /&amp;amp;gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;p&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;amp;lt;asp:TreeView ID=&amp;amp;quot;treeView1&amp;amp;quot; runat=&amp;amp;quot;server&amp;amp;quot; DataSourceID=&amp;amp;quot;ftp1&amp;amp;quot;&amp;amp;gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;    &amp;amp;lt;DataBindings&amp;amp;gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;        &amp;amp;lt;asp:TreeNodeBinding DataMember=&amp;amp;quot;Directory&amp;amp;quot; TextField=&amp;amp;quot;Name&amp;amp;quot; ImageUrl=&amp;amp;quot;~/Images/folder.gif&amp;amp;quot; /&amp;amp;gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;        &amp;amp;lt;asp:TreeNodeBinding DataMember=&amp;amp;quot;File&amp;amp;quot; TextField=&amp;amp;quot;Name&amp;amp;quot; ImageUrl=&amp;amp;quot;~/Images/file.gif&amp;amp;quot; /&amp;amp;gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;    &amp;amp;lt;/DataBindings&amp;amp;gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;amp;lt;/asp:TreeView&amp;amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="FtpDataSource" hspace="0" src="http://lab.ricciolo.aspitalia.com/images/ftp-datasource.gif" align="baseline" border="0" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0_per_tutti/" rel="tag"&gt;ASP.NET 2.0 per tutti&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Databinding/" rel="tag"&gt;Databinding&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1625/Capitolo-10-ObjectDataSource.aspx"&gt;&lt;em&gt;Capitolo 10 tutto su ObjectDataSource&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, ASP.NET, ASP.NET 2.0, ASP.NET 2.0 per tutti, Databinding</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1625/Capitolo-10-ObjectDataSource.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1625/Capitolo-10-ObjectDataSource.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1625.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1625</trackback:ping></item><item><title>ASP.NET 2.0 per tutti: capitolo 9 pronto</title><link>http://blogs.aspitalia.com/ricciolo/post1606/ASP.NET-2.0-Tutti-Capitolo.aspx</link><pubDate>Sun, 28 May 2006 20:55:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1606" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Eh sì, sono partito già molto avanti :-) affrontando i controlli &lt;strong&gt;DataSource&lt;/strong&gt; e i controlli composti che ne usufruiscono. E' un capitolo dove ho puntato più ad approfondire i concetti legati al binding e al nuovo approccio introdotto in &lt;strong&gt;ASP.NET 2.0&lt;/strong&gt;. Non tratto quindi come stilizzare GridView e compagni, visto che il libro non è di grandi dimensioni, meglio parlare delle cose importanti.&lt;/p&gt;&lt;p&gt;Il prossimo si concentra su &lt;strong&gt;ObjectDataSource&lt;/strong&gt;, personalizzazione dei DataSource e template. Le intenzioni sono buone e per adesso sono nella tabella di marcia, speriamo bene.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0_per_tutti/" rel="tag"&gt;ASP.NET 2.0 per tutti&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1606/ASP.NET-2.0-Tutti-Capitolo.aspx"&gt;&lt;em&gt;ASP.NET 2.0 per tutti: capitolo 9 pronto&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, ASP.NET 2.0 per tutti</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1606/ASP.NET-2.0-Tutti-Capitolo.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1606/ASP.NET-2.0-Tutti-Capitolo.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1606.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1606</trackback:ping></item><item><title>Gestione dei Threads in ASP.NET</title><link>http://blogs.aspitalia.com/ricciolo/post1563/Gestione-Threads-ASP.NET.aspx</link><pubDate>Wed, 19 Apr 2006 19:36:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1563" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Devo fare una correzione riguardante a ciò che ho detto nella mia sessione tenuta durante i &lt;a href="http://www.communitydays.it/events/communitydays2006milano.aspx" target="_blank"&gt;community days&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Parlando del worker process di ASP.NET ho spiegato come il motore gestisce le richieste con una lista di 20 thread già pronti. Nel dirla mi è venuto un dubbio e sono andato controllare. In ASP.NET 2 i threads nella impostazione di default, sono 100 per CPU così come i threads IO.&lt;br /&gt;Questa impostazione è modificabile nel machine.config attraverso la sezione &lt;strong&gt;processModel&lt;/strong&gt;. Normalmente è presente un unico attributo autoConfig, ma è possibile impostare manualmente maxWorkerThreads e maxIoThreads.&lt;br /&gt;Se non ci credete, chiamate &lt;strong&gt;System.Threading.ThreadPool.GetMaxThreads&lt;/strong&gt; e vedrete quanti threads sono stati allocati dal motore di ASP.NET.&lt;/p&gt;&lt;p&gt;Questa modifica è importante. Aumentare o diminuire il numero dei threads può incidere sulle performance delle applicazioni. Un numero troppo basso può limitare il numero delle richieste che l'applicazione può soddisfare, un numero troppo alto può sprecare cicli di CPU per il context switch tra un thread e l'altro e peggiorare ancor di più il worker process.&lt;/p&gt;&lt;p&gt;C'è da considerare comunque che nelle applicazioni web alcune richieste restano in attesa, magari perché invocano webservices o aspettano una risposta dal database così da non pesare sul processo di ASP.NET, ma comunque impegnando un thread.&lt;/p&gt;&lt;p&gt;Chieso scusa per non essere stato preciso.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/HttpRuntime/" rel="tag"&gt;HttpRuntime&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/IIS/" rel="tag"&gt;IIS&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Server/" rel="tag"&gt;Windows Server&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1563/Gestione-Threads-ASP.NET.aspx"&gt;&lt;em&gt;Gestione dei Threads in ASP.NET&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, ASP.NET, ASP.NET 2.0, HttpRuntime, IIS, Windows Server</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1563/Gestione-Threads-ASP.NET.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1563/Gestione-Threads-ASP.NET.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1563.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1563</trackback:ping></item><item><title>RealTime Web Event Provider</title><link>http://blogs.aspitalia.com/ricciolo/post1512/RealTime-Web-Event-Provider.aspx</link><pubDate>Tue, 14 Mar 2006 21:57:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1512" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Nel tempo libero sto sviluppando un piccolo tool in grado di mostrare in real time gli eventi generati da un'applicazione ASP.NET 2.&lt;br /&gt;&lt;a href="http://blogs.aspitalia.com/nostromo/" target="_blank"&gt;Marco&lt;/a&gt; ha parlato in &lt;a title="Costruire provider Health Monitoring" href="http://www.aspitalia.com/script/748/CostruireProviderHealthMonitoringASP.NET2.0.aspx" target="_blank"&gt;questo articolo&lt;/a&gt; come sviluppare un provider che gestisce gli eventi web e anch'io ho fatto lo stesso usando .NET remoting per comunicare tra l'applicazione web e windows.&lt;br /&gt;Eccovi uno screenshot parziale di quello che sto facendo:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lab.ricciolo.aspitalia.com/images/rtwp.png"&gt;&lt;img alt="RTWP" hspace="0" src="http://lab.ricciolo.aspitalia.com/images/rtwp-p.png" align="baseline" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Niente di particolare, ma nelle mie intenzioni c'è la possibilità di attivare alerts e filtri sugli eventi e di estendere il sistema di health monitoring per un'analisi più approfondita, ovviamente se ne sarò capace :-D&lt;/p&gt;&lt;p&gt;Vi farò sapere...&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1512/RealTime-Web-Event-Provider.aspx"&gt;&lt;em&gt;RealTime Web Event Provider&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1512/RealTime-Web-Event-Provider.aspx</guid><slash:comments>7</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1512/RealTime-Web-Event-Provider.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1512.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1512</trackback:ping></item><item><title>Tasks per MSBuild</title><link>http://blogs.aspitalia.com/ricciolo/post1470/Tasks-MSBuild.aspx</link><pubDate>Tue, 14 Feb 2006 17:46:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1470" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;MSBuild è una novità importante della versione 2 del Framework .NET e molto comoda, tanto da spingere Microsoft a rendere disponibile anche una &lt;a href="http://www.aspitalia.com/focuson/751/MSBeeBeta1VS2005CompilaNETFramework11.aspx" target="_blank"&gt;versione 1&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Naufragando tra i miei feeds ho trovato &lt;a href="http://msbuildtasks.tigris.org/" target="_blank"&gt;questo progetto&lt;/a&gt; open source che raccoglie una serie di tasks per eseguire le funzionalità più disparate quando lanciamo msbuild.&lt;/p&gt;&lt;p&gt;Ce ne sono di carini come la possibilità di eseguire operazioni su sourcesafe, creare virtual directory e application pool, creare zip ed eseguire operazioni sui window services.&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1470/Tasks-MSBuild.aspx"&gt;&lt;em&gt;Tasks per MSBuild&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1470/Tasks-MSBuild.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1470/Tasks-MSBuild.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1470.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1470</trackback:ping></item><item><title>Bindare Nullable Types in automatico</title><link>http://blogs.aspitalia.com/ricciolo/post1443/Bindare-Nullable-Types-Automatico.aspx</link><pubDate>Mon, 30 Jan 2006 21:08:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1443" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Oggi &lt;a href="http://blogs.aspitalia.com/az/" target="_blank"&gt;Andrea &amp;quot;pota pota&amp;quot;&lt;/a&gt; ha fatto una &lt;a href="http://forum.aspitalia.com/forum/post/257013/NullableTypeVengonoBindatiAutomatico.aspx" target="_blank"&gt;domanda&lt;/a&gt; molto interessante nel forum riguardo ad un problema che non avevo ancora incontrato. GridView, DetailsView, FormView danno la possibilità di auto generare i fields da mostrare in funzione della sorgente dati, ma nell'esempio portato caricava una classe contenente dei membri nullabili (Nullable types), caratteristica introdotta in .NET 2 poiché si basa sulla struttura Nullable&lt;t /&gt; generica. Questi membri però non vengono mostrati.&lt;/p&gt;&lt;p&gt;I controlli si appoggiano a TypeDescriptor.GetProperties per ottenere le proprietà di un tipo (che implementa eventualmente ICustomTypeDescriptor) e le filtra interrogando il metodo IsBindableType. Questo fa sì che vengano scartati membri diversi dai tipi primitivi, date o stringhe. Purtroppo il Type di un membro nullabile è Nullable generico e non il tipo di valore che si sta rendendo nullabile.&lt;/p&gt;&lt;p&gt;Fortunamente il metodo è sovrascrivibile e si può fargli digerire anche i nullable types:&lt;/p&gt;&lt;p&gt;&lt;div class="codebox"&gt;&lt;pre&gt;public class MyGridView : GridView { &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public override bool IsBindableType(Type type)&amp;nbsp;{&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return !(!base.IsBindableType(type) &amp;amp;amp;&amp;amp;amp; !type.IsGenericType);&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;br&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;Spero possa esservi utile in futuro ;-)&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1443/Bindare-Nullable-Types-Automatico.aspx"&gt;&lt;em&gt;Bindare Nullable Types in automatico&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1443/Bindare-Nullable-Types-Automatico.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1443/Bindare-Nullable-Types-Automatico.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1443.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1443</trackback:ping></item><item><title>ViewState e validazione eventi</title><link>http://blogs.aspitalia.com/ricciolo/post1382/ViewState-Validazione-Eventi.aspx</link><pubDate>Sat, 10 Dec 2005 15:47:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1382" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Vi assicuro che non vivo solo di ViewState anche se mi ritrovo di nuovo a parlarne :-)&lt;/p&gt;&lt;p&gt;Ci sono altre novità nella versione 2 di cui non avevo ancora letto niente. Vi sarete magari trovati di fronte ad un nuovo campo nasconto della form di nome __EVENTVALIDATION. Si può controllare questo campo tramite la proprietà Page.&lt;strong&gt;EnableEventValidation&lt;/strong&gt; e fa sì che venga controllato se eventuali postbacks sono validi.&lt;/p&gt;&lt;p&gt;Per esempio, se abbiamo una tabella dodata per ogni riga di un pulsante di cancellazione spesso si sfrutta il CommandName o il CommandArgument per identificare il record. Ma cosa succede se qualche malintenzionato fa il POST di una form con un __EVENTTARGET modificato? Potrebbe cancellare un record non di sua competenza. Certo come ci insegna &lt;a href="http://blogs.aspitalia.com/rickyvr/" target="_blank"&gt;Riccardo&lt;/a&gt;, uno strato business sottostante dovrebbe già prevedere questo tipo di situazione e saremmo quindi al riparo.&lt;br /&gt;Ma questa architettura non sempre viene sempre utilizzata o scritta nel modo corretto, perciò ogni controllo di ASP.NET 2 richiede questo controllo. Lo possiamo fare anche dai nostri controlli custom richiamando GetPostBackEventReference con l'argomento registerForEventValidation a true o manualmente con ClientScriptManager.&lt;strong&gt;RegisterForEventValidation&lt;/strong&gt; e validando il postback con ClientScriptManager.&lt;strong&gt;ValidateEvent&lt;/strong&gt;. Se il controllo non passa verrà generata un'eccezione ArgumentException: &lt;em&gt;Invalid postback or callback argument&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Ma non finisce qui. La classe Page dispone di una proprietà &lt;strong&gt;ViewStateEncryptionMode&lt;/strong&gt;, di default impostata su Auto. Ciò significa che normalmente il viewstate è codificato BASE64 soltamente, ma qualora un controllo lo richieda con &lt;strong&gt;RegisterRequiresViewStateEncryption&lt;/strong&gt; il ViewState viene criptato e non ci sarà quindi verso di decifrarlo con i normali decoder.&lt;br /&gt;Chi richiede la criptazione in modo automatico in fase di Init sono i controlli: DataList, DetailsView, FormView, GridView.&lt;/p&gt;&lt;p&gt;Per le modalità di criptazione guardare la sezione di web.config system.web/machineKey. Di default usa Auto (Rijndael) con chiave autogenerata isolata per applicazione.&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1382/ViewState-Validazione-Eventi.aspx"&gt;&lt;em&gt;ViewState e validazione eventi&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1382/ViewState-Validazione-Eventi.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1382/ViewState-Validazione-Eventi.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1382.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1382</trackback:ping></item><item><title>Preview ViewState Analyzer per ASP.NET 2</title><link>http://blogs.aspitalia.com/ricciolo/post1100/Preview-ViewState-Analyzer-ASP.NET.aspx</link><pubDate>Tue, 21 Jun 2005 11:41:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1100" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Continua la mia migrazione da ASP.NET 1.x a 2 e tra questi c'è anche lo sviluppo della nuova versione del mio &lt;a href="http://blogs.aspitalia.com/ricciolo/category26.aspx" target="_blank"&gt;ViewStateAnalyzer&lt;/a&gt;. In questa nuova versione ho cercato di facilitare la sua configurazione, omettendo la configurazione da web.config. Ora un estensione apposita mappa sulle normali aspx ed è possibile analizzare qualsiasi Page custom.&lt;br /&gt;Inoltre ora è una toolbar aggiuntiva per Internet Explorer, in questo modo lo strumento è sempre a portata di mano e mi toglie il peso di dover sviluppare funzioni di navigazione, bookmarks ecc.&lt;br /&gt;Vi posto uno screenshot per avere un'idea di come uscirà poiché è ancora in fase di sviluppo&lt;/p&gt;&lt;p&gt;&lt;a href="http://lab.aspitalia.com/Ricciolo/Images/vsa2.PNG"&gt;&lt;img hspace="0" src="http://lab.aspitalia.com/Ricciolo/Images/vsa2b.PNG" align="baseline" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Per chi non lo sapesse questo strumento offre oltre ad un normale decoder del viewstate utilizzabile su qualsiasi pagina la possibilità di:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;visualizzare l'intero grafo dei controlli&lt;/li&gt;&lt;li&gt;conoscere quali hanno il viewstate abilitato/disabilitato e il loro ID&lt;/li&gt;&lt;li&gt;visualizzare per ogni controllo il viewstate / control state (&lt;em&gt;new&lt;/em&gt;) con modalità ottimizzate in funzione di strutture di salvataggio conosciute (ViewState bag ecc)&lt;/li&gt;&lt;li&gt;mostrare l'html generato da ogni controllo e cercarlo all'interno della pagina renderizzata (&lt;em&gt;new&lt;/em&gt;)&lt;/li&gt;&lt;li&gt;conoscere gli handlers gestiti su ogni controllo con auto suggerimento di eventuali disabilitazioni di viewstate&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Il tutto funziona tramite un handler che raccoglie le informazioni necessarie e le invia tramite remoting alla toolbar che è in ascolto.&lt;/p&gt;&lt;p&gt;Credo sia uno strumento molto utile, quindi spero di finirlo il prima possibile in modo da usarlo e renderlo il più stabile possibile.&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1100/Preview-ViewState-Analyzer-ASP.NET.aspx"&gt;&lt;em&gt;Preview ViewState Analyzer per ASP.NET 2&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1100/Preview-ViewState-Analyzer-ASP.NET.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1100/Preview-ViewState-Analyzer-ASP.NET.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1100.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1100</trackback:ping></item><item><title>ViewState da ASP.NET 1.x - 2.0</title><link>http://blogs.aspitalia.com/ricciolo/post1086/ViewState-ASP.NET-1.x-2.0.aspx</link><pubDate>Fri, 10 Jun 2005 19:18:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1086" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Non so perché ma il ViewState è un mio pallino e mi cattura molto l'idea che ci sta dietro. Quindi vi parlo di cosa è cambiato in ASP.NET 2.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ASP.NET 1.x&lt;br /&gt;&lt;/strong&gt;Per farlo bisogna partire da cosa c'è adesso. Come saprete ogni Control ha un metodo SaveViewState che dobbiamo sovrascrivere per persistere le informazioni durante i postbacks. Il metodo base salva ciò che è contenuto nello StateBag fornito dalla proprietà ViewState, quindi spesso si ricorre a salvare elementi in questo hashtable (che piace tanto tanto a &lt;a href="http://blogs.devleap.com/paolo/"&gt;Paolo&lt;/a&gt; :-D). Tutto questo viene fatto ricorsivamente per tutto l'albero degli oggetti. Una volta terminato, tramite la classe LosFormatter il tutto viene serializzato in stringa e convertito in Base64 per poter esserito inserito nel value del campo nascosto __VIEWSTATE.&lt;br /&gt;L'unico mezzo che abbiamo per modificare cosa e dove persistere è sovrascrivere Page.SavePageStateToPersistenceMedium / LoadPageStateFromPersistenceMedium. Il LosFormatter lavora in modo da prendere l'intero grafo di oggetti e ricorsivamente serializzare ogni oggetto con una sua formattazione particolare. Consiste infatti nell'indicare con una lettera il tipo primitivo o conosciuto e tra &amp;lt; &amp;gt; mettere il valore a seconda del tipo. Per esempio un intero di valore 5 verrà trasformato in i&amp;lt;5&amp;gt;.&lt;br /&gt;Eccovi una tabella del lavoro che fa&lt;/p&gt;&lt;p&gt;&lt;table style="WIDTH: 100%" cellspacing="1" cellpadding="1" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Tipo&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefisso&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Valore&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;intero&lt;/td&gt;&lt;td&gt;i&lt;/td&gt;&lt;td&gt;numero&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;bool&lt;/td&gt;&lt;td&gt;o&lt;/td&gt;&lt;td&gt;t oppure f&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;arraylist&lt;/td&gt;&lt;td&gt;l&lt;/td&gt;&lt;td&gt;valori separati da punto e virgola&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;hashtable&lt;/td&gt;&lt;td&gt;h&lt;/td&gt;&lt;td&gt;chiave ; valore ;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pair&lt;/td&gt;&lt;td&gt;p&lt;/td&gt;&lt;td&gt;valore ; valore&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;triplet&lt;/td&gt;&lt;td&gt;t&lt;/td&gt;&lt;td&gt;valore ; valore ; valore&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;arraystringhe&lt;/td&gt;&lt;td&gt;@&lt;/td&gt;&lt;td&gt;valori separati da punto e virgola&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;array&lt;/td&gt;&lt;td&gt;@&lt;/td&gt;&lt;td&gt;id del tipo numerico &amp;lt; valori separati da ; &amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;altri tipi&lt;/td&gt;&lt;td&gt;b&lt;/td&gt;&lt;td&gt;sottoserializzazione nello stesso modo. Se possiede un TypeConverter usa ConvertTo(stringa) e ConvertFrom(stringa)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Le classi Pair e Triplet sono state create per velocizzare il lavoro e perché occupanti meno spazio rispetto ad un array. Ecco perché nel controlli del Framework se ne fa ampio uso. La sottoserializzazione avviene annidando i valori; per esempio questo oggetto:&lt;/p&gt;&lt;p&gt;&lt;code&gt;new Pair(&amp;quot;ciao&amp;quot;, new Pair(2,3))&lt;/code&gt;&lt;/p&gt;&lt;p&gt;diventerà: p&amp;lt;ciao;p&amp;lt;i&amp;lt;2&amp;gt;;i&amp;lt;3&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;Successivamente come già detto tutto questo viene convertito in Base64. La conversione consiste nel racchiudere un set di bytes che vanno da un range di 0 a 255 in un set di bytes che vanno da 0 a 63 e corrispondenti a caratteri trasportabili (dalla A-Z0-9+=) della tabella ASCII US. Questa operazione comporta però un aumento dei bytes in ingresso di circa un terzo.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ASP.NET 2&lt;br /&gt;&lt;/strong&gt;Come già &lt;a href="http://blogs.aspitalia.com/nostromo/post1063.aspx"&gt;anticipato&lt;/a&gt; da Marco, il ViewState è stato affiancato dal Control State. Non c'è nessuna differenza tra i due. Entrambi infatti verrano uniti tramite un Pair di root e verranno serializzati insieme. C'ho che cambia è lo scopo: salvare le informazioni minime per il funzionamento del controllo. La particolarità sta nel fatto che per salvare delle informazioni in questo &amp;quot;bag&amp;quot; dovremo sovrascrivere Control.SaveControlState, ma che questo non viene più fatto ricorsivamente. Ad indicare che il controlstate deve essere usato pochissimo, anzi, molti controlli non ne fanno uso. Infatti è necessario notificare alla Page che abbiamo bisogno di persistere queste informazioni tramite Page.RegisterRequireControlState.&lt;/p&gt;&lt;p&gt;Tutto questo verrà serializzato e persistito tramite Page.PageStatePersister una proprietà che possiamo sovrascrivere e che dispone di due implementazioni: HiddenFieldPageStatePersister e SessionStatePageStatePersister. I nomi dicono già tutto: il primo serializza e butta il tutto nel campo nascosto __VIEWSTATE e l'altro persiste nella session senza riempire la pagina da restituire al client.&lt;br /&gt;L'aspetto interessante è che la scelta viene fatta sfruttando gli adaptive rendering. Per dispositivi mobile è configurato infatti di utilizzare il persister su sessione.&lt;/p&gt;&lt;p&gt;Ora LosFormatter è stato sostiuito (seppure presente per motivi di retrocompatibilità) da ObjectStateFormatter. La prima differenza sta nel fatto che non vengono più usati il &amp;lt; &amp;gt; per racchiudere un oggetto e non sono più annidati, ma &amp;quot;concatenati&amp;quot; uno dopo l'altro. Questo porta ad una riduzione dei bytes utilizzati specialmente se gli oggetti sono tanti. Inoltre il prefisso è stato sostituito da un byte progressivo che parte da 100 (0x65) ad indicare la tipologia di dato serializzato. Questa scelta mi sembra essere solo stilistica e fine a nient'altro, magari mi sfugge qualcosa. La gamma dei tipi conosciuti è stata ulteriorermente migliorata ed estesa a tipi come: Unit, Char, DateTime, Color, Type. Questo per ridurre al minimo la trasformazione in stringa essendo tipi di uso comune.&lt;br /&gt;Una classe importante è IndexedString. Qualora il formatter trovi nel grafo degli oggetti di questo tipo ed è la prima volta che lo incontra, memorizza il valore in un hashtable e scriverà in output (byte)5 + stringa. La volta successiva invece scriverà (byte)31 indice di posizione dell'hashtable. In questo modo indicizza e non ripete più volte il valore. Questa classe viene sfruttata quando la proprietà Control.ViewState deve essere persistita.&lt;br /&gt;Tutto questo verrà poi convertito come in .NET 1.x in Base64.&lt;br /&gt;Il risultato di tutto questo è una maggiore compressione del ViewState specialmente con una struttura d'albero complessa e con molti oggetti.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1086/ViewState-ASP.NET-1.x-2.0.aspx"&gt;&lt;em&gt;ViewState da ASP.NET 1.x - 2.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, ASP.NET, ASP.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1086/ViewState-ASP.NET-1.x-2.0.aspx</guid><slash:comments>2</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1086/ViewState-ASP.NET-1.x-2.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1086.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1086</trackback:ping></item><item><title>TextBox con AutoComplete per ASP.NET 2</title><link>http://blogs.aspitalia.com/ricciolo/post1084/TextBox-AutoComplete-ASP.NET.aspx</link><pubDate>Thu, 09 Jun 2005 19:15:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1084" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Potevo resistere a non fare una versione della mia carissima TextBox anche per ASP.NET 2!? Ovviamente no anche perché il lavoro di adattamento non è stato molto. L'avevo appoggiato sulle &lt;a href="http://lab.aspitalia.com/lab.aspx?ID=3"&gt;ClientPages&lt;/a&gt; che dispongono di un'architettura molto simile, anzi rubata :-D&lt;/p&gt;&lt;p&gt;Il risultato è questo&lt;br /&gt;&lt;img hspace="0" src="http://lab.aspitalia.com/Ricciolo/Images/textboxac.png" align="baseline" border="0" /&gt;&lt;/p&gt;&lt;p&gt;Uguale a prima, ma sicuramente è comodissimo l'uso:&lt;/p&gt;&lt;p&gt;&lt;code&gt;&amp;lt;cc1:TextBoxAC ID=&amp;quot;TextBoxAC1&amp;quot; AutoCompleteMode=&amp;quot;Server&amp;quot; DataSourceID=&amp;quot;test&amp;quot;&lt;br /&gt;                DataTextField=&amp;quot;Capoluogo&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;&amp;lt;asp:AccessDataSource ID=&amp;quot;test&amp;quot; runat=&amp;quot;server&amp;quot; DataFile=&amp;quot;~/App_Data/province.mdb&amp;quot; &lt;br /&gt;         SelectCommand=&amp;quot;SELECT [Provincia], [Capoluogo] FROM [Province] WHERE ([Capoluogo] LIKE ? + '%')&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;SelectParameters&amp;gt;&lt;br /&gt;  &amp;lt;asp:ControlParameter Name=&amp;quot;Capoluogo&amp;quot; Type=&amp;quot;String&amp;quot; ControlID=&amp;quot;TextBoxAC1&amp;quot; /&amp;gt;&lt;br /&gt; &amp;lt;/SelectParameters&amp;gt;&lt;br /&gt;&amp;lt;/asp:AccessDataSource&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Per realizzarlo ho ereditato da DataBoundControl della quale parlavo qualche giorno fa. Automaticamente carica i dati indipendentemente dal fatto che usiate la modalità client (tutto buttato in un array javascript) o server (uso del client callback).&lt;/p&gt;&lt;p&gt;Lo trovate completo di sorgenti &lt;a href="http://lab.aspitalia.com/Ricciolo/Downloads/TextBoxAC.zip" target="_blank"&gt;qua&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/AJAX/" rel="tag"&gt;AJAX&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/JavaScript/" rel="tag"&gt;JavaScript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1084/TextBox-AutoComplete-ASP.NET.aspx"&gt;&lt;em&gt;TextBox con AutoComplete per ASP.NET 2&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, AJAX, ASP.NET, ASP.NET 2.0, JavaScript</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1084/TextBox-AutoComplete-ASP.NET.aspx</guid><slash:comments>13</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1084/TextBox-AutoComplete-ASP.NET.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1084.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1084</trackback:ping></item><item><title>Controlli web con ASP.NET 2</title><link>http://blogs.aspitalia.com/ricciolo/post1083/Controlli-Web-ASP.NET.aspx</link><pubDate>Tue, 07 Jun 2005 20:55:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1083" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Oramai se sviluppate con ASP.NET avrete capito l'organizzazione dei controlli e di cosa offrono. Tutto fa a capo alla classe System.Web.UI.Control che espone le funzioni basilari. Poi se vogliamo rappresentare un tag html senza particolari carattaristiche possiamo ereditare da System.Web.HtmlControls.HtmlControl o più avanzato ancora da System.Web.WebControls.WebControl che aggiunge funzionalità di Styling.&lt;/p&gt;&lt;p&gt;In ASP.NET 2 tutto questo è rimasto invariato; si è allargata la famiglia degli HtmlControls aggiungendo ad esempio HtmlHead, HtmlTitle o HtmlLink che ci permettono di impostare il Title o gli Styles in modo più semplice. Una nuova tipologia si è affiancata per metterci di utilizzare le sorgenti dati in modo dichiarativo, tramite le classi System.Web.UI.DataSourceControl e System.Web.UI.HierarchicalDataSourceControl (per sorgenti gerarchiche).&lt;/p&gt;&lt;p&gt;Sono state aggiunte però anche delle classi intermedie che racchiudono logiche comuni in molti WebControl anche custom che spesso dovevamo replicare. Una di queste è CompositeControl dalla quale dobbiamo ereditare se il nostro controllo non è altro che un contenitore di altri controlli. Implementa INamingContainer quindi ci toglie il problema di eventuali conflitti di ID e si assicura di creare i controlli figli ogni qual volta si accede alla proprietà Controls e di richiamarne il databinding.&lt;/p&gt;&lt;p&gt;Altra classe base è BaseDataBoundControl. Un webcontrol che espone le proprietà DataSource e DataSourceID e controlla di effettuare il binding durante i postbacks o qualora non avessi chiamato manualmente il metodo DataBind. Da questa ereditano DataBoundControl e HierarchicalDataBoundControl che da come si può capire si occupano di caricare i DataSource collegati e ne fanno il select. Il metodo più importante di cui dispongono è PerformDataBinding. Ci basta sovrascrivere questo membro e ci verrà passata la sorgente già risolta come IEnumerable che possiamo iterare ed eventualmente accedere ai valori tramite DataBinder.GetPropertyValue. Non dovremo preoccuparci d'altro e di questa comodità ne fanno uso i vari ListControl (DropDownList, CheckBoxList ecc). Se CompositeControl è pensato per controlli composti, ma senza dati, esiste il corrispettivo CompositeDataBoundControl che unisce entrambe le cose. E' sfruttato da GridView, FormView e DetailsView che sono appunto classi che istanziano altri controlli. La particolarità sta nel metodo astratto CreateChildControls che riceve la sorgente già risolta e un parametro dataBinding. Questo ci serve perché la prima volta che viene caricata ad esempio il GridView, verrà creata la lista delle righe e caricate con i rispettivi valori. In caso di postback invece, se abbiamo il view state abilitato, dataBinding sarà a false e la dataSource sarà un intero indicante il numero di righe. Sono informazioni sufficienti per ricreare lo stesso numero di TableRow. Per il resto ci penserà il ViewState e ci consentirà di mantenere le informazioni senza andarle a riprendere dalla sorgente.&lt;/p&gt;&lt;p&gt;Come ho già detto tutta questa logica c'era già prima, ma ora è stata &amp;quot;patternizzata&amp;quot; e la possiamo utilizzare anche noi a seconda delle esigenze.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1083/Controlli-Web-ASP.NET.aspx"&gt;&lt;em&gt;Controlli web con ASP.NET 2&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, ASP.NET, ASP.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1083/Controlli-Web-ASP.NET.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1083/Controlli-Web-ASP.NET.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1083.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1083</trackback:ping></item><item><title>AutoEventWireup con ASP.NET 2</title><link>http://blogs.aspitalia.com/ricciolo/post1056/AutoEventWireup-ASP.NET.aspx</link><pubDate>Mon, 16 May 2005 16:15:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=1056" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Qualche tempo fa &lt;a href="http://blogs.aspitalia.com/ricciolo/post793.aspx"&gt;parlai&lt;/a&gt; dell'implementazione dell'AutoEventWiredUp di ASP.NET sottolineando come riducesse moltissimo le performance e dell'oppurtunità di tenerlo sempre disattivato.&lt;/p&gt;&lt;p&gt;In ASP.NET 2 l'AutoEventWiredUp è ancora di default attivo e soprattutto Visual Studio 2005 a differenza di Visual Studio .NET 2003 lo tiene ancora attivo. Mi sono quindi spaventato e ho verificato cosa fa:&lt;/p&gt;&lt;p&gt;Quando impostiamo a false la proprietà viene emesso del codice nella pagina che sovrascrive TemplateControl.SupportAutoEvents. In funzione di questa variabile ad ogni esecuzione aggancia quindi gli eventi. La differenza sta nel fatto che tenta ancora di creare il delegate alla funzione tramite Delegate.CreateDelegate, ma ora alla funzione è possibile chiedere se generare o meno un'eccezione. Già questo migliora di molto le performance, inoltre mantiene un dictionary di MethodInfo (oggetti reflection) in cache così da non ripetere più l'operazione.&lt;br /&gt;Per non pesare ancora sulla ricerca degli eventi alla quale agganciarsi in presenza di un metodo con il nome corretto, viene poi in aiuto il pattern degli eventi che sfrutta un dictionary nomevento (stringa) / delegate dell'evento. Il lavoro quindi dell'uso dell'AutoEventWiredUp si limita a sfogliare il dictionary contenente i metodi della nostra classe e il dictionary degli eventi.&lt;/p&gt;&lt;p&gt;Insomma, ora va molto meglio anche se personalmente continuerò con l'override dei metodi che scatenano gli eventi e la disattivazione della funzione.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/ricciolo/post1056/AutoEventWireup-ASP.NET.aspx"&gt;&lt;em&gt;AutoEventWireup con ASP.NET 2&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Cristian &amp;quot;Ricciolo&amp;quot; Civera</dc:creator><category>.NET 2.0, ASP.NET 2.0, ASP.NET</category><guid isPermaLink="true">http://blogs.aspitalia.com/ricciolo/post1056/AutoEventWireup-ASP.NET.aspx</guid><slash:comments>4</slash:comments><wfw:comment>http://blogs.aspitalia.com/ricciolo/post1056/AutoEventWireup-ASP.NET.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/ricciolo/CommentRSS1056.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=1056</trackback:ping></item></channel></rss>