<?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>Marco De Sanctis - Contenuti e Blog da ASPItalia.com Network</title><link>http://blogs.aspitalia.com/cradle/</link><description>Marco De Sanctis - Contenuti e Blog da ASPItalia.com Network</description><language>it-it</language><copyright>1998-2012 ASPItalia.com/Marco De Sanctis - Contenuti e Blog da ASPItalia.com Network</copyright><generator>Generated by feed.ASPItalia.com 'Cortana' 2012.1.31</generator><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><sy:updateBase>1998-01-01T12:00+00:00</sy:updateBase><lastBuildDate>Mon, 13 Feb 2012 07:00:00 GMT</lastBuildDate><image><title>Marco De Sanctis - Contenuti e Blog da ASPItalia.com Network</title><url>http://www.aspitalia.com/images/aspitalia_100_30.gif</url><link>http://blogs.aspitalia.com/cradle/</link></image><item><title>Visualizzare un template per browser mobile tramite un custom control ASP.NET</title><link>http://www.aspitalia.com/script/1077/Visualizzare-Template-Browser-Mobile-Tramite-Custom-Control-ASP.NET.aspx</link><pubDate>Mon, 13 Feb 2012 07:00:00 GMT</pubDate><description>&lt;p&gt;Quando dobbiamo sviluppare siti &lt;strong&gt;ottimizzati per mobile con ASP.NET&lt;/strong&gt;, una delle possibilità che abbiamo è quella di &lt;strong&gt;adattare&lt;/strong&gt; il contenuto delle nostre pagine, in modo che siano correttamente ...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Custom_Control/" rel="tag"&gt;Custom Control&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1077/Visualizzare-Template-Browser-Mobile-Tramite-Custom-Control-ASP.NET.aspx"&gt;&lt;em&gt;Visualizzare un template per browser mobile tramite un custom control 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) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, , .NET Framework 4.0, ASP.NET, Custom Control</category><guid isPermaLink="true">http://www.aspitalia.com/script/1077/Visualizzare-Template-Browser-Mobile-Tramite-Custom-Control-ASP.NET.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1077/Visualizzare-Template-Browser-Mobile-Tramite-Custom-Control-ASP.NET.aspx#feedback</wfw:comment></item><item><title>Gestire il supporto all&amp;#39;intellisense JavaScript in Visual Studio 2010</title><link>http://www.aspitalia.com/script/1076/Gestire-Supporto-Intellisense-JavaScript-Visual-Studio-2010.aspx</link><pubDate>Mon, 06 Feb 2012 07:00:00 GMT</pubDate><description>&lt;p&gt;Il supporto all'&lt;strong&gt;Intellisense in JavaScript&lt;/strong&gt; è tutt'altro che banale, vista la &lt;strong&gt;natura dinamica&lt;/strong&gt; di questo linguaggio e il fatto che non sia fortemente tipizzato. Nonostante ciò, sin da Visual Studio ...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.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/Javascript/" rel="tag"&gt;Javascript&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/jQuery/" rel="tag"&gt;jQuery&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1076/Gestire-Supporto-Intellisense-JavaScript-Visual-Studio-2010.aspx"&gt;&lt;em&gt;Gestire il supporto all&amp;#39;intellisense JavaScript in Visual Studio 2010&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1076/Gestire-Supporto-Intellisense-JavaScript-Visual-Studio-2010.aspx"&gt;&lt;em&gt;Gestire il supporto all&amp;amp;#39;intellisense JavaScript in Visual Studio 2010&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, ASP.NET 3.5, ASP.NET MVC, , .NET Framework 4.0, ASP.NET, Javascript, jQuery, Visual Studio</category><guid isPermaLink="true">http://www.aspitalia.com/script/1076/Gestire-Supporto-Intellisense-JavaScript-Visual-Studio-2010.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1076/Gestire-Supporto-Intellisense-JavaScript-Visual-Studio-2010.aspx#feedback</wfw:comment></item><item><title>C# 4 - Espresso</title><link>http://books.aspitalia.com/CSharp-4-Espresso/</link><pubDate>Tue, 31 Jan 2012 07:30:00 GMT</pubDate><description>&lt;p&gt;Aggiornata a .NET Framework 4.0 e Visual Studio 2010, questa guida espressa a C#4 è l'espressione corale di un gruppo di sviluppatori che utilizza questo linguaggio sin dalla prima versione, per costruire ...&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://books.aspitalia.com/CSharp-4-Espresso/"&gt;&lt;em&gt;C# 4 - Espresso&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><dc:creator>Cristian Civera</dc:creator><dc:creator>Marco De Sanctis</dc:creator><dc:creator>Riccardo Golia</dc:creator><dc:creator>Alessio Leoncini</dc:creator><dc:creator>Marco Leoncini</dc:creator><dc:creator>Stefano Mostarda</dc:creator><category>Hoepli Informatica</category><guid isPermaLink="true">http://books.aspitalia.com/CSharp-4-Espresso/</guid><slash:comments>0</slash:comments><wfw:comment>http://books.aspitalia.com/CSharp-4-Espresso/#feedback</wfw:comment></item><item><title>Visual Basic 2010 - Espresso</title><link>http://books.aspitalia.com/VisualBasic-2010-Espresso/</link><pubDate>Tue, 31 Jan 2012 07:30:00 GMT</pubDate><description>&lt;p&gt;Aggiornata a .NET Framework 4.0 e Visual Studio 2010, questa guida espressa a Visual Basic 2010 è l'espressione corale di un gruppo di sviluppatori che utilizza questo linguaggio sin dalla prima versione, per ...&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://books.aspitalia.com/VisualBasic-2010-Espresso/"&gt;&lt;em&gt;Visual Basic 2010 - Espresso&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><dc:creator>Cristian Civera</dc:creator><dc:creator>Marco De Sanctis</dc:creator><dc:creator>Riccardo Golia</dc:creator><dc:creator>Alessio Leoncini</dc:creator><dc:creator>Marco Leoncini</dc:creator><dc:creator>Stefano Mostarda</dc:creator><category>Hoepli Informatica</category><guid isPermaLink="true">http://books.aspitalia.com/VisualBasic-2010-Espresso/</guid><slash:comments>0</slash:comments><wfw:comment>http://books.aspitalia.com/VisualBasic-2010-Espresso/#feedback</wfw:comment></item><item><title>Impedire il remote linking di immagini tramite URL Rewrite Module di IIS 7</title><link>http://www.aspitalia.com/script/1075/Impedire-Remote-Linking-Immagini-Tramite-URL-Rewrite-Module-IIS.aspx</link><pubDate>Mon, 30 Jan 2012 07:00:00 GMT</pubDate><description>&lt;p&gt;Quando un sito web diventa particolarmente popolare, può accadere che i suoi contenuti, nella fattispecie immagini, video e quant'altro, vengano mostrati &lt;strong&gt;all'interno di pagine esterne&lt;/strong&gt;, magari senza ...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.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_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&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/web.config/" rel="tag"&gt;web.config&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://www.aspitalia.com/script/1075/Impedire-Remote-Linking-Immagini-Tramite-URL-Rewrite-Module-IIS.aspx"&gt;&lt;em&gt;Impedire il remote linking di immagini tramite URL Rewrite Module di IIS 7&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, ASP.NET 3.5, ASP.NET MVC, , .NET Framework 4.0, ASP.NET, IIS, web.config, Windows Server</category><guid isPermaLink="true">http://www.aspitalia.com/script/1075/Impedire-Remote-Linking-Immagini-Tramite-URL-Rewrite-Module-IIS.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1075/Impedire-Remote-Linking-Immagini-Tramite-URL-Rewrite-Module-IIS.aspx#feedback</wfw:comment></item><item><title>Sfruttare l&amp;#39;URL Rewrite Module di IIS per gestire il redirect verso HTTPS</title><link>http://www.aspitalia.com/script/1074/Sfruttare-URL-Rewrite-Module-IIS-Gestire-Redirect-HTTPS.aspx</link><pubDate>Mon, 23 Jan 2012 07:00:00 GMT</pubDate><description>&lt;p&gt;Nel precedente script #1073 abbiamo visto come problemi di &lt;strong&gt;URL Canonicalization&lt;/strong&gt; possano essere risolti in maniera dichiarativa tramite un componente di IIS, denominato &lt;strong&gt;URL Rewrite Module&lt;/strong&gt;, che ...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.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_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&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/Security/" rel="tag"&gt;Security&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/web.config/" rel="tag"&gt;web.config&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://www.aspitalia.com/script/1074/Sfruttare-URL-Rewrite-Module-IIS-Gestire-Redirect-HTTPS.aspx"&gt;&lt;em&gt;Sfruttare l&amp;#39;URL Rewrite Module di IIS per gestire il redirect verso HTTPS&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1074/Sfruttare-URL-Rewrite-Module-IIS-Gestire-Redirect-HTTPS.aspx"&gt;&lt;em&gt;Sfruttare l&amp;amp;#39;URL Rewrite Module di IIS per gestire il redirect verso HTTPS&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, ASP.NET MVC, , .NET Framework 4.0, ASP.NET, ASP.NET 3.5, IIS, Security, web.config, Windows Server</category><guid isPermaLink="true">http://www.aspitalia.com/script/1074/Sfruttare-URL-Rewrite-Module-IIS-Gestire-Redirect-HTTPS.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1074/Sfruttare-URL-Rewrite-Module-IIS-Gestire-Redirect-HTTPS.aspx#feedback</wfw:comment></item><item><title>Impostare la canonizzazione degli URL in IIS 7 con URL Rewrite Module</title><link>http://www.aspitalia.com/script/1073/Impostare-Canonizzazione-URL-IIS-URL-Rewrite-Module.aspx</link><pubDate>Mon, 16 Jan 2012 07:00:00 GMT</pubDate><description>&lt;p&gt;Quando pubblichiamo un sito web su internet, tipicamente &lt;strong&gt;registriamo più domini internet&lt;/strong&gt; (.it, .com, .net, ecc.) in modo da favorire al massimo la possibilità che gli utenti raggiungano le nostre pagine....&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.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_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&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/SEO/" rel="tag"&gt;SEO&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/web.config/" rel="tag"&gt;web.config&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://www.aspitalia.com/script/1073/Impostare-Canonizzazione-URL-IIS-URL-Rewrite-Module.aspx"&gt;&lt;em&gt;Impostare la canonizzazione degli URL in IIS 7 con URL Rewrite Module&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 3.5, ASP.NET 4.0, ASP.NET MVC, , .NET Framework 4.0, ASP.NET, IIS, SEO, web.config, Windows Server</category><guid isPermaLink="true">http://www.aspitalia.com/script/1073/Impostare-Canonizzazione-URL-IIS-URL-Rewrite-Module.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1073/Impostare-Canonizzazione-URL-IIS-URL-Rewrite-Module.aspx#feedback</wfw:comment></item><item><title>PhoneGap e Titanium, esiste davvero il write once run anywhere su mobile?</title><link>http://blogs.aspitalia.com/cradle/post2730/PhoneGap-Titanium-Esiste-Davvero-Write-Once-Run-Anywhere.aspx</link><pubDate>Thu, 12 Jan 2012 08:30:00 GMT</pubDate><description>&lt;p&gt;Ultimamente si fa davvero un gran parlare di framework che consentono di sviluppare sulle varie piattaforme mobile, senza dover necessariamente scrivere codice nativo. Tra queste, probabilmente la più famosa è ...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/HTML5/" rel="tag"&gt;HTML5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Javascript/" rel="tag"&gt;Javascript&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/jQuery/" rel="tag"&gt;jQuery&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Metro/" rel="tag"&gt;Metro&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Phone/" rel="tag"&gt;Windows Phone&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Phone_7/" rel="tag"&gt;Windows Phone 7&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Phone_7.1/" rel="tag"&gt;Windows Phone 7.1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2730/PhoneGap-Titanium-Esiste-Davvero-Write-Once-Run-Anywhere.aspx"&gt;&lt;em&gt;PhoneGap e Titanium, esiste davvero il write once run anywhere su mobile?&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, HTML5, Javascript, jQuery, Metro, Windows Phone, Windows Phone 7, Windows Phone 7.1</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2730/PhoneGap-Titanium-Esiste-Davvero-Write-Once-Run-Anywhere.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2730/PhoneGap-Titanium-Esiste-Davvero-Write-Once-Run-Anywhere.aspx#feedback</wfw:comment></item><item><title>Richiedere una conferma via mail alla registrazione di un utente in ASP.NET MVC</title><link>http://www.aspitalia.com/script/1072/Richiedere-Conferma-Mail-Registrazione-Utente-ASP.NET-MVC.aspx</link><pubDate>Mon, 09 Jan 2012 07:00:00 GMT</pubDate><description>&lt;p&gt;Come abbiamo già visto nello script #1067, il &lt;strong&gt;SimpleMembershipProvider&lt;/strong&gt; di &lt;strong&gt;ASP.NET Web Pages&lt;/strong&gt; include out-of-the-box una serie di funzionalità evolute che possono essere molto comode da utilizzare ...&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_4.0/" rel="tag"&gt;.NET Framework 4.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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Security/" rel="tag"&gt;Security&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/web.config/" rel="tag"&gt;web.config&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/WebMatrix/" rel="tag"&gt;WebMatrix&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1072/Richiedere-Conferma-Mail-Registrazione-Utente-ASP.NET-MVC.aspx"&gt;&lt;em&gt;Richiedere una conferma via mail alla registrazione di un utente in ASP.NET MVC&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, ASP.NET MVC, ASP.NET Web Pages, WebMatrix, , .NET Framework, .NET Framework 4.0, ASP.NET, Security, web.config</category><guid isPermaLink="true">http://www.aspitalia.com/script/1072/Richiedere-Conferma-Mail-Registrazione-Utente-ASP.NET-MVC.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1072/Richiedere-Conferma-Mail-Registrazione-Utente-ASP.NET-MVC.aspx#feedback</wfw:comment></item><item><title>Gestire l&amp;#39;edit di collection di dati in ASP.NET MVC</title><link>http://www.aspitalia.com/script/1070/Gestire-Edit-Collection-Dati-ASP.NET-MVC.aspx</link><pubDate>Mon, 12 Dec 2011 07:00:00 GMT</pubDate><description>&lt;p&gt;Quando gestiamo &lt;strong&gt;l'input dell'utente&lt;/strong&gt; in ASP.NET MVC, spesso ci limitiamo a realizzare una action, invocata in POST, che accetta come parametro &lt;strong&gt;un oggetto del model&lt;/strong&gt;:[code lang="c#"][HttpPost]public ...&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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&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_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1070/Gestire-Edit-Collection-Dati-ASP.NET-MVC.aspx"&gt;&lt;em&gt;Gestire l&amp;#39;edit di collection di dati in ASP.NET MVC&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1070/Gestire-Edit-Collection-Dati-ASP.NET-MVC.aspx"&gt;&lt;em&gt;Gestire l&amp;amp;#39;edit di collection di dati in ASP.NET MVC&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, ASP.NET MVC, , ASP.NET, .NET Framework, .NET Framework 4.0</category><guid isPermaLink="true">http://www.aspitalia.com/script/1070/Gestire-Edit-Collection-Dati-ASP.NET-MVC.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1070/Gestire-Edit-Collection-Dati-ASP.NET-MVC.aspx#feedback</wfw:comment></item><item><title>Un html helper per utilizzare reCAPTCHA in ASP.NET MVC e WebMatrix</title><link>http://www.aspitalia.com/script/1069/Html-Helper-Utilizzare-ReCAPTCHA-ASP.NET-MVC-WebMatrix.aspx</link><pubDate>Mon, 28 Nov 2011 07:00:00 GMT</pubDate><description>&lt;p&gt;Un controllo di tipo &lt;strong&gt;CAPTCHA&lt;/strong&gt; serve a discriminare se il visitatore del nostro sito sia un utente "umano" o un Bot, solitamente utilizzato per inviare spam o procedere a registrazioni fasulle; esistono ...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/WebMatrix/" rel="tag"&gt;WebMatrix&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1069/Html-Helper-Utilizzare-ReCAPTCHA-ASP.NET-MVC-WebMatrix.aspx"&gt;&lt;em&gt;Un html helper per utilizzare reCAPTCHA in ASP.NET MVC e WebMatrix&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, ASP.NET MVC, ASP.NET Web Pages, WebMatrix, Razor, , .NET Framework 4.0, ASP.NET</category><guid isPermaLink="true">http://www.aspitalia.com/script/1069/Html-Helper-Utilizzare-ReCAPTCHA-ASP.NET-MVC-WebMatrix.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1069/Html-Helper-Utilizzare-ReCAPTCHA-ASP.NET-MVC-WebMatrix.aspx#feedback</wfw:comment></item><item><title>Definire metodi e helper all&amp;#39;interno di una pagina Razor in ASP.NET Web Pages o ASP.NET MVC</title><link>http://www.aspitalia.com/script/1068/Definire-Metodi-Helper-Interno-Pagina-Razor-ASP.NET-Web-Pages.aspx</link><pubDate>Mon, 21 Nov 2011 07:00:00 GMT</pubDate><description>&lt;p&gt;Capita spesso di dover riutilizzare più volte la stessa logica all'interno di una &lt;strong&gt;pagina Razor&lt;/strong&gt;, ad esempio per rappresentare in maniera uniforme il medesimo dato. Esigenze di questo tipo si risolvono ...&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_4.0/" rel="tag"&gt;.NET Framework 4.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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/WebMatrix/" rel="tag"&gt;WebMatrix&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1068/Definire-Metodi-Helper-Interno-Pagina-Razor-ASP.NET-Web-Pages.aspx"&gt;&lt;em&gt;Definire metodi e helper all&amp;#39;interno di una pagina Razor in ASP.NET Web Pages o ASP.NET MVC&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1068/Definire-Metodi-Helper-Interno-Pagina-Razor-ASP.NET-Web-Pages.aspx"&gt;&lt;em&gt;Definire metodi e helper all&amp;amp;#39;interno di una pagina Razor in ASP.NET Web Pages o ASP.NET MVC&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, ASP.NET MVC, ASP.NET Web Pages, WebMatrix, Razor, , .NET Framework, .NET Framework 4.0, ASP.NET</category><guid isPermaLink="true">http://www.aspitalia.com/script/1068/Definire-Metodi-Helper-Interno-Pagina-Razor-ASP.NET-Web-Pages.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1068/Definire-Metodi-Helper-Interno-Pagina-Razor-ASP.NET-Web-Pages.aspx#feedback</wfw:comment></item><item><title>Rilasciato jQuery Mobile 1.0</title><link>http://www.html5italia.com/focuson/1258/Rilasciato-JQuery-Mobile-1.0.aspx</link><pubDate>Fri, 18 Nov 2011 10:37:00 GMT</pubDate><description>&lt;p&gt;In poco più di un anno dalla sua prima apparizione, il popolare framework javascript dedicato allo sviluppo per dispositivi raggiunge la prima stable release. Finalmente ci siamo: un anno o poco più di lavoro, ...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/HTML5/" rel="tag"&gt;HTML5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Javascript/" rel="tag"&gt;Javascript&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/jQuery/" rel="tag"&gt;jQuery&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.html5italia.com/focuson/1258/Rilasciato-JQuery-Mobile-1.0.aspx"&gt;&lt;em&gt;Rilasciato jQuery Mobile 1.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) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>HTML, CSS e JavaScript, HTML5, Javascript, jQuery</category><guid isPermaLink="true">http://www.html5italia.com/focuson/1258/Rilasciato-JQuery-Mobile-1.0.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.html5italia.com/focuson/1258/Rilasciato-JQuery-Mobile-1.0.aspx#feedback</wfw:comment></item><item><title>WPC 2011: Cosa mi/ci/vi aspetta!</title><link>http://blogs.aspitalia.com/cradle/post2721/WPC-2011-Aspetta.aspx</link><pubDate>Mon, 14 Nov 2011 07:01:00 GMT</pubDate><description>&lt;p&gt;Quest'anno sono davvero orgoglioso di essere riuscito a salire a bordo della più importante conference IT italiana: è infatti per me un grande onore essere uno degli speaker di WPC 2011, dove terrò una sessione...&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/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Architettura/" rel="tag"&gt;Architettura&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Cache/" rel="tag"&gt;Cache&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Entity_Framework_4.1/" rel="tag"&gt;Entity Framework 4.1&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/jQuery/" rel="tag"&gt;jQuery&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Pattern/" rel="tag"&gt;Pattern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2721/WPC-2011-Aspetta.aspx"&gt;&lt;em&gt;WPC 2011: Cosa mi/ci/vi aspetta!&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET, .NET Framework, .NET Framework 4.0, Architettura, ASP.NET MVC, Cache, Entity Framework 4.1, jQuery, Pattern</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2721/WPC-2011-Aspetta.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2721/WPC-2011-Aspetta.aspx#feedback</wfw:comment></item><item><title>Realizzare siti sicuri con ASP.NET Web Pages</title><link>http://www.aspitalia.com/script/1067/Realizzare-Siti-Sicuri-ASP.NET-Web-Pages.aspx</link><pubDate>Mon, 14 Nov 2011 07:00:00 GMT</pubDate><description>&lt;p&gt;Analogamente alle altre funzionalità che abbiamo avuto modo di esplorare in questo speciale, come interazione con i database e social network, &lt;strong&gt;ASP.NET Web Pages&lt;/strong&gt; espone una classe helper estremamente ...&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_4.0/" rel="tag"&gt;.NET Framework 4.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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Security/" rel="tag"&gt;Security&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/WebMatrix/" rel="tag"&gt;WebMatrix&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://www.aspitalia.com/script/1067/Realizzare-Siti-Sicuri-ASP.NET-Web-Pages.aspx"&gt;&lt;em&gt;Realizzare siti sicuri con ASP.NET Web Pages&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://twitter.aspitalia.com/"&gt;Se vuoi sempre restare aggiornato, segui &lt;strong&gt;@aspitalia&lt;/strong&gt; anche su Twitter!&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET 4.0, ASP.NET MVC, ASP.NET Web Pages, WebMatrix, Razor, , .NET Framework, .NET Framework 4.0, ASP.NET, Security</category><guid isPermaLink="true">http://www.aspitalia.com/script/1067/Realizzare-Siti-Sicuri-ASP.NET-Web-Pages.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://www.aspitalia.com/script/1067/Realizzare-Siti-Sicuri-ASP.NET-Web-Pages.aspx#feedback</wfw:comment></item><item><title>CDays10, the day after: ringraziamenti, precisazioni, tricchettracc e bombamman</title><link>http://blogs.aspitalia.com/cradle/post2671/CDays10-The-Day-After-Ringraziamenti-Precisazioni-.aspx</link><pubDate>Sat, 18 Dec 2010 12:17:33 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2671" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Sto scrivendo queste righe mentre sono su un treno che mi riporta in Abruzzo, dopo che Ryanair ha pensato bene di cancellare il mio volo di ieri sera (insieme a quelli di un altro migliaio di passeggeri). bah.&lt;/p&gt; &lt;p&gt;Anyway, innanzitutto volevo ringraziare tutti i partecipanti ai &lt;a href="http://www.communitydays.it/events/communitydays2010-milano.aspx" target="_blank"&gt;Community Days 2010&lt;/a&gt;, in particolar modo quelli che sono rimasti ad ascoltare la mia sessione e quella di &lt;a href="http://blogs.ugidotnet.org/pape/Default.aspx" target="_blank"&gt;Andrea&lt;/a&gt;, nonostante l'incognita della neve e della percorribilità delle strade. Non ho parole, grazie sul serio, spero che ciò che vi ho mostrato di Web Forms possa in qualche modo esservi utile e serva a ripagare la vostra pazienza! &lt;img alt="Smile" src="http://blogs.aspitalia.com/img/cradle/windows-live-writer/cd2010_b56c/wlemoticon-smile_2.png" /&gt;&lt;/p&gt; &lt;p&gt;Durante la sessione ho notato parecchio interesse, soprattutto attorno alle nuove funzionalità di &lt;strong&gt;Dynamic Data&lt;/strong&gt;, che secondo me rappresentano una vera rivoluzione nell'ambito di *come* scrivere un'applicazione web forms oggi. Mi fa piacere perchè non nascondo la mia passione per DynData, cercherò di utilizzare questo feedback anche in ottica di tuning degli script per il 2011.&lt;/p&gt; &lt;p&gt;Il medesimo interesse poi l'ho visto nella parte relativa alla &lt;strong&gt;cache&lt;/strong&gt;, peccato che &lt;strong&gt;AppFabric &lt;/strong&gt;abbia fatto le bizze e non mi abbia consentito di eseguire con successo tutte le demo che avevo preparato. Rimedierò con uno screencast al più presto, promesso! Quando parlo di &lt;em&gt;"fare le bizze"&lt;/em&gt; purtroppo intendo proprio &lt;em&gt;"fare le bizze"&lt;/em&gt;, nel senso che 10 minuti fa è bastato stoppare e riavviare il servizio perchè tutto funzionasse senza modificare una riga nel codice.. misteri sistemistici, con AppFabric siamo ancora alla versione 1.0 e magari c'è spazio ancora per qualche fix qua e là. Anyway, indagherò meglio e vi terrò aggiornati &lt;img alt="Winking smile" src="http://blogs.aspitalia.com/img/cradle/windows-live-writer/cd2010_b56c/wlemoticon-winkingsmile_2.png" /&gt;&lt;/p&gt; &lt;p&gt;Una risposta volante alla persona che mi ha chiesto della possibilità di invalidare elementi in cache in dipendenza da SQL Server: confermo che è possibile, la classe si chiama &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.caching.sqlchangemonitor.sqlchangemonitor.aspx" target="_blank"&gt;SqlChangeMonitor&lt;/a&gt; e non è altro che un wrapper della precedente &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx" target="_blank"&gt;SqlDependency&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Slide e demo online prestissimo, le sto "impacchettando" or ora per spedirle a &lt;a href="http://blogs.aspitalia.com/daniele/" target="_blank"&gt;Daniele&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Sentitevi liberi di contattarmi per ogni genere di domanda, un saluto e ancora grazie!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.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_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Cache/" rel="tag"&gt;Cache&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Community_Days_2010/" rel="tag"&gt;Community Days 2010&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Databinding/" rel="tag"&gt;Databinding&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Dynamic_Data_Control/" rel="tag"&gt;Dynamic Data Control&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2671/CDays10-The-Day-After-Ringraziamenti-Precisazioni-.aspx"&gt;&lt;em&gt;CDays10, the day after: ringraziamenti, precisazioni, tricchettracc e bombamman&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 3.5, ASP.NET 4.0, Cache, Community Days 2010, Databinding, Dynamic Data Control</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2671/CDays10-The-Day-After-Ringraziamenti-Precisazioni-.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2671/CDays10-The-Day-After-Ringraziamenti-Precisazioni-.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2671.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2671</trackback:ping></item><item><title>ASP.NET Web Forms ai Community Days, nel 2010</title><link>http://blogs.aspitalia.com/cradle/post2668/ASP.NET-Web-Forms-Community-Days-2010.aspx</link><pubDate>Fri, 10 Dec 2010 10:25:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2668" border="0" style="width:1px; height:1px;" /&gt;
&lt;p&gt;A parte il riferimento temporale, un post con un simile titolo avrebbe potuto tranquillamente essere pubblicato 5 anni fa (se non fosse che allora i Community Days non erano stati ancora inventati :D ). Si sa, è usanza - ed entro certi limiti non c'è niente di male, beninteso - seguire le mode del momento, che vogliono ad esempio in ASP.NET MVC la piattaforma più gettonata di cui parlare quando si vuole affrontare l'argomento dello sviluppo per il Web.&lt;/p&gt;&lt;p&gt;E però esiste tanto ASP.NET Web Forms in giro, ad oggi la piattaforma più diffusa per realizzare Web App basate su .NET, e soprattutto, si tratta di una tecnologia &lt;strong&gt;estremamente moderna&lt;/strong&gt;: &lt;strong&gt;Routing&lt;/strong&gt;, &lt;strong&gt;Data Template&lt;/strong&gt;, &lt;strong&gt;Data Annotations&lt;/strong&gt;, &lt;strong&gt;controllo del markup&lt;/strong&gt;, sono concetti che spesso si associano alle View, ai Model e ai Controller, magari portandoci erroneamente a pensare che, se vogliamo avvalercene, ASP.NET MVC sia una scelta obbligata.&lt;/p&gt;&lt;p&gt;Ebbene, non è assolutamente vero, ed è la principale ragione per cui, secondo me, ha veramente tantissimo senso &lt;strong&gt;nel 2010&lt;/strong&gt; avere una sessione come &lt;strong&gt;WebForms.Reload()&lt;/strong&gt; nell'agenda dei &lt;strong&gt;Community Days&lt;/strong&gt; e, di riflesso, è per me un grandissimo piacere poterne parlare. Visto che poi non ci facciamo mancare niente, toccheremo anche l'argomento Performance, e in particolare quel gioiellino che è &lt;strong&gt;AppFabric&lt;/strong&gt;, su cui ad esempio è basata l'infrastruttura di cache dell'interno network &lt;strong&gt;ASPItalia&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Che dire, se ho stuzzicato la vostra curiosità, ci vediamo a Milano, giovedì e venerdì prossimi.&lt;/p&gt;&lt;p&gt;Ciauz!&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_4.0/" rel="tag"&gt;.NET Framework 4.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_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Cache/" rel="tag"&gt;Cache&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Community_Days_2010/" rel="tag"&gt;Community Days 2010&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Databinding/" rel="tag"&gt;Databinding&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Dynamic_Data_Control/" rel="tag"&gt;Dynamic Data Control&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2668/ASP.NET-Web-Forms-Community-Days-2010.aspx"&gt;&lt;em&gt;ASP.NET Web Forms ai Community Days, nel 2010&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET, .NET Framework, .NET Framework 4.0, ASP.NET 3.5, ASP.NET 4.0, Cache, Community Days 2010, Databinding, Dynamic Data Control</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2668/ASP.NET-Web-Forms-Community-Days-2010.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2668/ASP.NET-Web-Forms-Community-Days-2010.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2668.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2668</trackback:ping></item><item><title>ASPItalia ti premia con Visual Studio 2010 Ultimate + MSDN Subscription!</title><link>http://blogs.aspitalia.com/cradle/post2653/ASPItalia-Premia-Visual-Studio-2010-Ultimate-MSDN-Subscription.aspx</link><pubDate>Wed, 01 Sep 2010 09:52:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2653" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Eh sì, per alleviarvi il triste ritorno dalle vacanze, ci siamo inventati un'iniziativa niente male: se siete appassionati di tecnologia e di sviluppo software, se avete pensato qualche volta che potevate contribuire con le vostre conoscenze a migliorare la community di ASPItalia, se magari in passato avete trovato delle dritte interessanti sui nostri forum e vi va di passare dalla parte di chi i consigli e le soluzioni invece le elargisce... insomma, se un po' vi riconoscete in qualcuno di questi &amp;quot;se&amp;quot;, &lt;a href="http://g.aspitalia.com/landings/competitions/"&gt;ASPItalia Community Awards 2010&lt;/a&gt; è lì per voi!&lt;/p&gt;&lt;p&gt;In base ai vostri contributi, secondo le modalità descritte nella &lt;a href="http://g.aspitalia.com/landings/competitions/"&gt;pagina dell'evento&lt;/a&gt;, stileremo una classifica e coloro che a fine mese si troveranno nelle prime &lt;strong&gt;due posizioni&lt;/strong&gt; si porteranno a casa niente meno che una &lt;strong&gt;Visual Studio 2010 Ultimate con MSDN Subscription&lt;/strong&gt; a testa (quindi in totale, regaliamo ben QUATTRO MSDN a quattro di voi!).&lt;/p&gt;&lt;p&gt;Dai, cosa aspettate? ;-)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&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_4.0/" rel="tag"&gt;.NET Framework 4.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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASPItalia.com/" rel="tag"&gt;ASPItalia.com&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/Visual_Studio/" rel="tag"&gt;Visual Studio&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/cradle/post2653/ASPItalia-Premia-Visual-Studio-2010-Ultimate-MSDN-Subscription.aspx"&gt;&lt;em&gt;ASPItalia ti premia con Visual Studio 2010 Ultimate + MSDN Subscription!&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 4.0, ASP.NET, ASP.NET 4.0, ASPItalia.com, Silverlight, Visual Studio, XAML</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2653/ASPItalia-Premia-Visual-Studio-2010-Ultimate-MSDN-Subscription.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2653/ASPItalia-Premia-Visual-Studio-2010-Ultimate-MSDN-Subscription.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2653.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2653</trackback:ping></item><item><title>Inside ModelVirtualCasting #7: Come ti creo una form MVC in 20 secondi (a dire tanto...)</title><link>http://blogs.aspitalia.com/cradle/post2640/Inside-ModelVirtualCasting-Sharp7-Creo-Form-MVC-20-A-Dire.aspx</link><pubDate>Tue, 15 Jun 2010 05:50:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2640" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Settima puntata per questa serie su &lt;a href="http://modelvirtualcasting.aspitalia.com/"&gt;ModelVC&lt;/a&gt; che, se continua così, ci porteremo fin sotto all'ombrellone! Qualche link ai precedenti post prima di iniziare...&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx"&gt;Introduzione ai repository&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx"&gt;Architettura interna dei repository&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;La cache&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2634/Inside-ModelVirtualCasting-Sharp4-Funziona-CacheThis.aspx"&gt;Come funziona CacheThis?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/ricciolo/post2636/Inside-ModelVirtualCasting-Sharp5-Servizi.aspx"&gt;I servizi&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2637/Inside-ModelVirtualCasting-Sharp6-SEO-ASP.NET-4.0.aspx"&gt;SEO con ASP.NET 4.0&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Stavolta ci tocca il compito di sfatare un mito, ossia il fatto che con &lt;strong&gt;ASP.NET MVC&lt;/strong&gt; il codice da scrivere è verboso, lungo e, in parole povere, molto meno &lt;a href="http://en.wikipedia.org/wiki/Rapid_application_development"&gt;RAD&lt;/a&gt; di Web Forms. Niente di più falso, grazie all'introduzione in MVC 2 degli &lt;strong&gt;editor e visualizer templates&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Immaginiamo un'ipotetica form di inserimento dati. Mentre in Web Forms il fulcro centrale dell'interfaccia è costituito dall'insieme dei controlli, in MVC invece&lt;strong&gt; il ruolo di protagonista è recitato dal model&lt;/strong&gt;, e dagli oggetti che lo compongono. Si tratta, quindi, di un concetto &lt;strong&gt;molto più di &amp;quot;business&amp;quot;&lt;/strong&gt; rispetto al passato, in cui possiamo specificare che un oggetto di tipo DateTime deve essere ovunque rappresentato in un certo modo e modificato in un altro.&lt;/p&gt;&lt;p align="baseline"&gt;Gli editor e visualizer templates non fanno altro che rendere possibile questo livello di astrazione: possiamo immaginarli come delle &lt;strong&gt;mini-partial view&lt;/strong&gt;, che vengono associate ad un particolare tipo di dato grazie al nome e automaticamente iniettate dal framework quando lo si voglia visualizzare o modificare. In ModelVC, ad esempio, ho voluto utilizzare il &lt;a href="http://jqueryui.com/demos/datepicker/"&gt;DatePicker&lt;/a&gt; di &lt;a href="http://jqueryui.com/"&gt;jQueryUI&lt;/a&gt; come editor per tutte le proprietà di tipo &lt;strong&gt;DateTime&lt;/strong&gt; di qualsiasi model delle mie pagine. Per farlo, ho creato un template di nome &lt;strong&gt;DateTime.ascx&lt;/strong&gt; (occhio che il nome è importante) che ho messo nella posizione che vedete in figura.&lt;/p&gt;&lt;p&gt;&lt;img src="http://blogs.aspitalia.com/img/Cradle/insidemodelvirtualcasting7formin20secondi/folders.jpg" /&gt;&lt;/p&gt;&lt;p&gt;Ma cosa contiene DateTime.ascx?&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;code&gt;&amp;lt;%@ Control Language=&amp;quot;C#&amp;quot; Inherits=&amp;quot;System.Web.Mvc.ViewUserControl&amp;quot; %&amp;gt;&lt;br /&gt;&amp;lt;script runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0;private string dateString&lt;br /&gt;&amp;#xa0;&amp;#xa0;{&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;get&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;{&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;if (this.Model == null)&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0;return null;&lt;br /&gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;return ((DateTime)this.Model).ToShortDateString();&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;}&lt;br /&gt;&amp;#xa0;&amp;#xa0;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;%= Html.TextBox(&amp;quot;&amp;quot;, dateString, new { @class = &amp;quot;dateInput&amp;quot; })%&amp;gt;&lt;/code&gt;&lt;p&gt;Fondamentalmente niente di che, semplicemente una &lt;strong&gt;TextBox con una classe CSS&lt;/strong&gt; particolare (dateInput) che posso utilizzare nella master page per attivare il DatePicker su tutte quelle che ne fanno uso:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0;$(function () {&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;$.datepicker.setDefaults($.datepicker.regional['it']);&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;$('.dateInput').datepicker();&lt;br /&gt;&amp;#xa0;&amp;#xa0;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;p&gt;Il risultato dell'aver definito questo template è che basta a questo punto scrivere&lt;/p&gt;&lt;code&gt;&amp;lt;%= Html.EditorFor(m =&amp;gt; m.BirthDate) %&amp;gt;&lt;/code&gt;&lt;p&gt;perché il nostro bell'editor custom venga utilizzato in luogo del normale box di testo, semplicemente perché BirthDate è di tipo DateTime (in realtà è anche possibile specificare esplicitamente quale editor referenziare tramite le &lt;strong&gt;DataAnnotations&lt;/strong&gt;).&lt;/p&gt;&lt;p&gt;Non male, vero? Ma l'aspetto più interessante è che, dato che da che mondo è mondo, in .NET &lt;strong&gt;tutto eredita da Object&lt;/strong&gt;, e nulla mi vieta di realizzare un bel template Object.ascx, che magari &lt;strong&gt;cicli per tutte le proprietà di un oggetto&lt;/strong&gt; e per ognuna di esse renderizzi l'opportuno editor, magari di nuovo di tipo Object. Morale della favola: ho l'oggetto &lt;strong&gt;Candidate&lt;/strong&gt;, che referenzia alcune altre entity e diversi complex type e voglio realizzarne una form di edit; bene, non devo far altro che scrivere&lt;/p&gt;&lt;code&gt;&amp;lt;%= Html.EditorFor(m =&amp;gt; m) %&amp;gt;&lt;/code&gt;&lt;p&gt;o ancora meglio&lt;/p&gt;&lt;code&gt;&amp;lt;%= Html.EditorForModel() %&amp;gt;&lt;/code&gt;&lt;p&gt;Come ho fatto? Andate a vederlo sul &lt;a href="http://modelvirtualcasting.codeplex.com/releases/view/46151"&gt;codice sorgente di ModelVC&lt;/a&gt; e nel frattempo, provate anche a vedere se riuscite con Web Forms a realizzare una form altrettanto velocemente ;-)&lt;/p&gt;&lt;p&gt;Ciao!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&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/jQuery/" rel="tag"&gt;jQuery&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Model_Virtual_Casting/" rel="tag"&gt;Model Virtual Casting&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/cradle/post2640/Inside-ModelVirtualCasting-Sharp7-Creo-Form-MVC-20-A-Dire.aspx"&gt;&lt;em&gt;Inside ModelVirtualCasting #7: Come ti creo una form MVC in 20 secondi (a dire tanto...)&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 4.0, ASP.NET MVC, Custom Control, jQuery, Model Virtual Casting, User Control</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2640/Inside-ModelVirtualCasting-Sharp7-Creo-Form-MVC-20-A-Dire.aspx</guid><slash:comments>1</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2640/Inside-ModelVirtualCasting-Sharp7-Creo-Form-MVC-20-A-Dire.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2640.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2640</trackback:ping></item><item><title>Inside ModelVirtualCasting #4: Come funziona CacheThis?</title><link>http://blogs.aspitalia.com/cradle/post2634/Inside-ModelVirtualCasting-Sharp4-Funziona-CacheThis.aspx</link><pubDate>Thu, 03 Jun 2010 05:30:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2634" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Quarto post della serie sugli internals dell'applicazione che abbiamo mostrato nel corso della Real Code Conference 4.0 lo scorso 25 Maggio 2010 i cui sorgenti sono disponibili &lt;a href="http://modelvirtualcasting.codeplex.com"&gt;su Codeplex&lt;/a&gt;:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx"&gt;Introduzione ai repository&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx"&gt;Architettura interna dei repository&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;La cache&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Come funziona CacheThis &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Dell'attributo &lt;strong&gt;CacheThis&lt;/strong&gt; ha già parlato un pochino &lt;a href="http://blogs.aspitalia.com/daniele/"&gt;Daniele&lt;/a&gt; &lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;nello scorso post&lt;/a&gt;, qualche giorno prima di RCC mi ha proposto di realizzare questa cosa perché era una figheria simpatica da far vedere, e allora mi sono convinto e l'ho messa su! Si tratta di un sistema per effettuare caching dei risultati di un metodo in maniera trasparente. Infatti, in maniera dichiarativa, ci basta scrivere:&lt;/p&gt; &lt;code&gt;public interface INewsRepository : IRepository&amp;lt;INewsRepository, News&amp;gt; &lt;br /&gt;{ &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [CacheThis(&amp;quot;last-news&amp;quot;, 60)] &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; List&amp;lt;NewsDTO&amp;gt; GetLastNewsDTO(int number); &lt;br /&gt;}&lt;/code&gt; &lt;p&gt;ed ecco che, come per incanto, il risultato di GetLastNewsDTO &lt;strong&gt;viene prelevato dalla cache&lt;/strong&gt;, se presente, oppure recuperato tramite una query su DataBase. Ma come funziona tutto questo, visto che, l'implementazione di questo metodo &lt;strong&gt;non ha la minima cognizione&lt;/strong&gt; del concetto di Cache?&lt;/p&gt; &lt;code&gt;public List&amp;lt;NewsDTO&amp;gt; GetLastNewsDTO(int number) &lt;br /&gt;{ &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return CurrentObjectSet.AsQueryable() &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .OrderByDescending(n =&amp;gt; n.PublicationDate) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Take(number) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .SelectDTO&amp;lt;News, NewsDTO&amp;gt;().ToList(); &lt;br /&gt;}&lt;/code&gt; &lt;p&gt;&lt;strong&gt;CacheThis &lt;/strong&gt;è un tipico esempio di &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;Aspect Oriented Programming&lt;/a&gt; sul quale potremmo scrivere qualche decina di post ma che, in parole povere, consente di &lt;strong&gt;iniettare logica in maniera modulare &lt;/strong&gt;nelle chiamate ai metodi di un oggetto, più o meno agendo in questo modo:&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/insidemodelvirtualcasting4comefunzionaca_14082/image_9b1db098-b899-48fe-9a9a-a1117dd9d6b8.png" width="549" height="278" /&gt; &lt;/p&gt; &lt;p&gt;In pratica, possiamo fare in modo che &lt;strong&gt;Unity&lt;/strong&gt;, quando chiediamo un'istanza di &lt;strong&gt;INewsRepository&lt;/strong&gt;, non restituisca direttamente NewsRepository, come ci aspetteremmo, bensì un &lt;strong&gt;proxy&lt;/strong&gt;, che implementa però la stessa interfaccia così che il nostro codice &lt;strong&gt;non si accorga minimamente&lt;/strong&gt; che qualcuno sta cambiando le carte in tavola.&lt;/p&gt; &lt;p&gt;Cosa fa questo proxy? Beh, normalmente niente, si limita a girare ogni chiamata a NewsRepository e a restituire il risultato prodotto, tranne quando il metodo invocato sia decorato dal famigerato attributo &lt;strong&gt;CacheThis&lt;/strong&gt;, nel qual caso viene eseguito il nostro bel &lt;strong&gt;CacheHandler&lt;/strong&gt; che, grossomodo, è fatto così (in pseudocodice):&lt;/p&gt; &lt;code&gt;public Result Invoke(...) &lt;br /&gt;{ &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (Cache.Contains(key)) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return Cache[key]; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; var result = invokeRealMethod(...);&lt;/p&gt; &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Cache.Add(key, result);&lt;/p&gt; &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; return result; &lt;br /&gt;}&lt;/p&gt; &lt;/code&gt; &lt;p&gt;In parole povere, &lt;strong&gt;CacheHandler&lt;/strong&gt; verifica se il risultato è già presente in cache, se viene trovato lo restituisce, altrimenti esegue il repository vero e proprio, mette in cache il risultato e lo ritorna.&lt;/p&gt; &lt;p&gt;Ora.. a dire il vero l'implementazione contenuta in ModelVC soffre di un paio di limitazioni, che sono nella lista della spesa delle feature da metter su per la prossima versione:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;supporta esclusivamente l'&lt;strong&gt;invalidazione via timeout&lt;/strong&gt;, mentre sarebbe bello se una Add/Modify/Delete di una news tramite repository invalidasse automaticamente la cache; &lt;/li&gt; &lt;li&gt;come sappiamo, quando realizziamo una query in LINQ to Entities, questa &lt;strong&gt;non viene eseguita finché non se ne esplori il risultato&lt;/strong&gt;; morale della favola.. dobbiamo forzarne l'esecuzione all'interno di NewsRepository (concreto), ad esempio con un ToList, altrimenti rischiamo di mettere in cache l'expression tree e non i risultati veri e propri. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;D'altro canto, però, CacheThis riesce a mantenere in Cache diversi risultati dello stesso metodo, &lt;strong&gt;creando chiavi on-the-fly a seconda dei parametri con cui è stato invocato&lt;/strong&gt; e, soprattutto, ci mostra come in maniera semplice possiamo sfruttare questa tecnica (che di per sé è invece parecchio avanzata) per &lt;strong&gt;iniettare funzionalità tramite Unity all'interno del nostro codice&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Che dire? Se volete saperne di più... i sorgenti di ModelVC &lt;a href="http://modelvirtualcasting.codeplex.com/releases/view/46151"&gt;non aspettano altro che essere scaricati&lt;/a&gt;, e continuate a seguire &lt;a href="http://modelvirtualcasting.codeplex.com/releases/view/46151"&gt;questa serie di post&lt;/a&gt; che io e gli altri ragazzi dello staff continueremo a pubblicare nei prossimi giorni.&lt;/p&gt; &lt;p&gt;Ciauz!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/Architettura/" rel="tag"&gt;Architettura&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Cache/" rel="tag"&gt;Cache&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Entity_Framework/" rel="tag"&gt;Entity Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Model_Virtual_Casting/" rel="tag"&gt;Model Virtual Casting&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Object_Oriented_Programming/" rel="tag"&gt;Object Oriented Programming&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2634/Inside-ModelVirtualCasting-Sharp4-Funziona-CacheThis.aspx"&gt;&lt;em&gt;Inside ModelVirtualCasting #4: Come funziona CacheThis?&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Architettura, Cache, Entity Framework, Model Virtual Casting, Object Oriented Programming</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2634/Inside-ModelVirtualCasting-Sharp4-Funziona-CacheThis.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2634/Inside-ModelVirtualCasting-Sharp4-Funziona-CacheThis.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2634.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2634</trackback:ping></item><item><title>Inside ModelVirtualCasting #2: Architettura interna dei repository</title><link>http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx</link><pubDate>Mon, 31 May 2010 05:30:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2629" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Secondo post della serie sugli internals di ModelVC che abbiamo presentato a Real Code Day 4.0 prima e successivamente a Real Code Conference 4.0.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx"&gt;Introduzione ai repository&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Architettura interna dei repository &lt;/li&gt; &lt;li&gt;more to come... &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;La volta scorsa abbiamo visto perché abbiamo scelto di utilizzare i repository all'interno di ModelVC e abbiamo dato una panoramica dell'architettura secondo cui funzionano, che essenzialmente li porta ad essere dei wrapper degli ObjectSet di ADO.NET Entity Framework con qualche funzionalità in più. Semplificando un po', allora, il codice di un repository può essere pensato simile al seguente:&lt;/p&gt; &lt;code&gt;public class Repository&amp;lt;T&amp;gt; where T : class &lt;br /&gt;{ &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private IObjectSet&amp;lt;T&amp;gt; objectSet; &lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Repository(ObjectContext context) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.objectSet = context.CreateObjectSet&amp;lt;T&amp;gt;(); &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; internal Repository(IObjectSet&amp;lt;T&amp;gt; objectSet) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.objectSet = objectSet; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void InsertOnSubmit(T entity) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.objectSet.AddObject(entity); &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void Update(T entity) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.objectSet.Attach(entity); &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public IQueryable&amp;lt;T&amp;gt; Where(Expression&amp;lt;Func&amp;lt;T, bool&amp;gt;&amp;gt; predicate) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return this.objectSet.Where(predicate); &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;br /&gt;}&lt;/code&gt; &lt;p&gt;Notiamo un paio di aspetti interessanti, che ci semplificano tanto la vita in fase di test:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Non manteniamo &lt;strong&gt;alcun riferimento&lt;/strong&gt; a tipi concreti di ADO.NET Entity Framework, che è presente solo con l'interfaccia &lt;strong&gt;IObjectSet&amp;lt;T&amp;gt;&lt;/strong&gt;; &lt;/li&gt; &lt;li&gt;E' presente un costruttore internal tramite cui fornire direttamente un IObjectSet, che può essere utilizzato &lt;strong&gt;per iniettare un mock o un fake&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Ottimo, sarebbe tutto bellissimo se non fosse che purtroppo per le funzionalità che vogliamo esporre, la sola IObjectSet&amp;lt;T&amp;gt; non basta: esempio? il metodo &lt;strong&gt;Include&lt;/strong&gt;, che vogliamo utilizzare per indicare ad EF quali entity collegate deve caricare, è esposto da &lt;strong&gt;ObjectSet&amp;lt;T&amp;gt; &lt;/strong&gt;(e anche da ObjectQuery, sua classe base) ma non dall'interfaccia. Come fare allora? Io e &lt;a href="http://blogs.aspitalia.com/sm15455/"&gt;Stefano&lt;/a&gt; ci abbiamo riflettuto un po' e alla fine ne siamo venuti a capo in questo modo:&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/insidemodelvirtualcasting2architetturain_10253/image_2b318124-f37d-469c-9f17-9132d8994a13.png" width="475" height="293" /&gt; &lt;/p&gt; &lt;p&gt;In pratica abbiamo introdotto le nuove interfacce &lt;strong&gt;IObjectQuery&amp;lt;T&amp;gt;&lt;/strong&gt; e &lt;strong&gt;IIncludeObjectSet&amp;lt;T&amp;gt;&lt;/strong&gt;, che espongono il metodo Include come desiderato; in particolare quest'ultima è referenziata all'interno di Repository&amp;lt;T&amp;gt; &lt;strong&gt;al posto di IObjectSet&amp;lt;T&amp;gt;&lt;/strong&gt;, così che finalmente abbiamo a disposizione la funzionalità richiesta.&lt;/p&gt; &lt;p&gt;In Entity Framework, però, ObjectSet&amp;lt;T&amp;gt; ovviamente non implementa IIncludeObjectSet&amp;lt;T&amp;gt;, e pertanto siamo stati costretti a realizzarne &lt;strong&gt;un wrapper&lt;/strong&gt;. Si tratta di un giro un po' complicato se vogliamo (tra l'altro la versione che trovate su ModelVC è leggermente più complessa) ma che fondamentalmente ci consente di costruire repository senza avere riferimenti a tipi concreti di Entity Framework. A cosa serve? a darci la possibilità di realizzare un &lt;strong&gt;FakeObjectSet&lt;/strong&gt;, che trovate in &lt;strong&gt;ASPItalia.ModelVirtualCasting.MVC.Tests&lt;/strong&gt; nella cartella Utils, che possiamo utilizzare per verificare che il nostro repository funzioni senza scomodare SQL Server:&lt;/p&gt; &lt;code&gt;var list = new List&amp;lt;User&amp;gt;(); &lt;br /&gt;list.Add(new User() { Nick = &amp;quot;Cradle&amp;quot;}); &lt;br /&gt; &lt;br /&gt;var rep = new UserRepository(new FakeObjectSet&amp;lt;User&amp;gt;(list)); &lt;br /&gt;Assert.AreEqual(list[0], repo.GetByNickname("Cradle"));&lt;/code&gt; &lt;p&gt;Cool, isn't it? Alla prossima!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/Architettura/" rel="tag"&gt;Architettura&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASPItalia.com/" rel="tag"&gt;ASPItalia.com&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Model_Virtual_Casting/" rel="tag"&gt;Model Virtual Casting&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Pattern/" rel="tag"&gt;Pattern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx"&gt;&lt;em&gt;Inside ModelVirtualCasting #2: Architettura interna dei repository&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Architettura, ASPItalia.com, Model Virtual Casting, Pattern</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx</guid><slash:comments>1</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2629.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2629</trackback:ping></item><item><title>Inside ModelVirtualCasting #1: Introduzione ai repository</title><link>http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx</link><pubDate>Thu, 27 May 2010 06:00:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2627" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Allora, l'avevo promesso, vediamo quanto riesco a mantenere l'impegno preso nel scrivere una serie di post su alcuni aspetti, soprattutto architetturali, che abbiamo scelto di utilizzare in &lt;a href="http://modelvirtualcasting.codeplex.com/"&gt;ModelVirtualCasting&lt;/a&gt; (ModelVC per gli amici).&lt;/p&gt;

&lt;p&gt;L'argomento di cui vorrei parlarvi stasera è &lt;strong&gt;il modello di accesso ai dati&lt;/strong&gt; che abbiamo scelto di utilizzare. Immagino che abbiate capito che ModelVC usi internamente &lt;strong&gt;ADO.NET Entity Framework&lt;/strong&gt;, sebbene questo non sia esposto direttamente agli strati sovrastanti, che invece hanno la possibilità di accedere alla base dati tramite degli oggetti chiamati &lt;strong&gt;Repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cos'è un repository e soprattutto, perché questa scelta? In due parole, un repository è un oggetto che si frappone tra noi e lo strato di accesso ai dati, comportandosi come se fosse &lt;strong&gt;una normale collection .NET&lt;/strong&gt;, supportando quindi aggiunte e rimozioni di oggetti, e sul quale possiamo eseguire query (ad esempio tramite &lt;strong&gt;LINQ&lt;/strong&gt;) come se i dati si trovassero già tutti in memoria. Ottimo, ma allora sono simili agli &lt;a href="http://msdn.microsoft.com/en-us/library/dd412719.aspx"&gt;ObjectSet&lt;/a&gt; di Entity Framework, che bisogno abbiamo di scrivere questo codice in più? Vediamo un attimo la struttura delle interfacce:&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/Cradle/insidemodelvirtualcasting1introduzioneai_556/image_7f9147cb-7cf3-484d-bd84-63f469d1f5ca.png" width="568" height="311" /&gt; &lt;/p&gt;

&lt;p&gt;Come vedete, questa architettura mi consente un livello di personalizzazione che con gli ObjectSet non ho, ossia:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Avere a disposizione due interfacce base, &lt;strong&gt;IReadOnlyRepository&lt;/strong&gt; e &lt;strong&gt;IRepository&lt;/strong&gt;, ci consente di &lt;strong&gt;forzare in sola lettura&lt;/strong&gt; alcune entità, che by design immaginiamo non dovranno mai essere inserite o eliminate; &lt;/li&gt;

  &lt;li&gt;Possiamo esporre &lt;strong&gt;metodi personalizzati&lt;/strong&gt; per un repository specifico, quando questo può risultare comodo, come nel caso di &lt;strong&gt;GetByUsername &lt;/strong&gt;su IUserRepository &lt;/li&gt;

  &lt;li&gt;Possiamo &lt;strong&gt;personalizzare il comportamento &lt;/strong&gt;in fase di Add, ad esempio effettuando su UserRepository un override del metodo InsertOnSubmit e verificare al suo interno che l'email dell'utente che stiamo inserendo non sia già presente nel database. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Il tutto senza rinunciare alle potenzialità di &lt;strong&gt;Linq To Entities&lt;/strong&gt;, visto che i nostri Repository agiscono come wrapper proprio di ObjectSet e che metodi come Where e GetAll restituiscono una IQueryable&amp;lt;T&amp;gt;, così che possiamo tranquillamente scrivere qualcosa tipo&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var query = myUserRepository&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;.Where(u =&amp;gt; u.Username == u.Password)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;.Select(u =&amp;gt; new { Nick = u.Username, Email = u.Email } );&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;e star sicuri che l'expression tree generato verrà dato in pasto all'engine di EF e &lt;strong&gt;tradotto in una query SQL&lt;/strong&gt; verso il database.&lt;/p&gt;

&lt;p&gt;Ultimo e fondamentale vantaggio, avere questa struttura basata su interfacce ci consente di &lt;strong&gt;disaccoppiare gli strati superiori &lt;/strong&gt;(servizi o UI) da una particolare implementazione, che può essere invece scelta a runtime, così che l'indomani possiamo realizzare un set di repository basati su una tecnologia completamente diversa (mah.. questa affermazione mi è sempre sembrata un po' fuffosa, sarò sincero con voi :D) o soprattutto:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Semplificarci la vita in fase di test&lt;/strong&gt;, visto che un IUserRepository è infinitamente più facile da mockare rispetto a EntityFrameworkContext.Users (brrr...); questo è un punto a favore &lt;strong&gt;importantissimo&lt;/strong&gt;, dato che IObjectSet&amp;lt;T&amp;gt; già esposta da EntityFramework in realtà non espone tutte le logiche necessarie a gestire con efficacia un ObjectSet perché mancano parecchie robe fondamentali; &lt;/li&gt;

  &lt;li&gt;Possiamo realizzare dei &lt;strong&gt;FakeRepository &lt;/strong&gt;(li trovate in ASPItalia.ModelVirtualCasting.Fake) per testare la nostra applicazione su dati cablati nel codice, senza scomodare il database, consentendoci quindi a tutti gli effetti di &lt;strong&gt;parallelizzare alla grande il lavoro&lt;/strong&gt;; per esempio, io sono riuscito a sviluppare parte dell'interfaccia utente quando &lt;a href="http://blogs.aspitalia.com/SM15455/"&gt;Stefano&lt;/a&gt; ancora non aveva sviluppato nessun repository concreto, quindi &lt;strong&gt;con lo strato dati praticamante inesistente&lt;/strong&gt;! E vi assicuro che, quando Stefano ha completato il suo lavoro, non ho dovuto cambiare nulla della UI per adeguarmi, solo una serie di impostazioni sul web.config. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bene, con questa vi saluto e, sperando che vi interessi, vi do appuntamento ai prossimi post, nei quali ci addentreremo un po' nei meandri di questi oggetti per scoprire più nel dettaglio come sono fatti e come riusciamo ad istanziarli!&lt;/p&gt;

&lt;p&gt;Ciao!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/Architettura/" rel="tag"&gt;Architettura&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASPItalia.com/" rel="tag"&gt;ASPItalia.com&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Entity_Framework/" rel="tag"&gt;Entity Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Model_Virtual_Casting/" rel="tag"&gt;Model Virtual Casting&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Pattern/" rel="tag"&gt;Pattern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx"&gt;&lt;em&gt;Inside ModelVirtualCasting #1: Introduzione ai repository&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ORM, Architettura, ASPItalia.com, Entity Framework, Model Virtual Casting, Pattern</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx</guid><slash:comments>3</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2627.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2627</trackback:ping></item><item><title>Real Code Conference 4.0: Debriefing...</title><link>http://blogs.aspitalia.com/cradle/post2626/Real-Code-Conference-4.0-Debriefing.aspx</link><pubDate>Wed, 26 May 2010 14:11:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2626" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;&lt;p&gt;Siete stati tantissimi e vorrei ringraziarvi ad uno ad uno per essere stati con noi, per averci fatto domande e per esservi mostrati così interessati a quanto avevamo da dirvi. Mi scuso per le persone che sono state costrette a vedere parte della conference nell'altra sala, ma il numero ha superato le nostre più rosee aspettative e ci siamo dovuti adattare un po' tutti.&lt;/p&gt;&lt;p&gt;Per quanto riguarda la mia sessione, devo dire che ho visto diversi volti interessati mentre parlavo; purtroppo in eventi di questo tipo non è possibile approfondire più di tanto gli argomenti, la fretta la fa sempre da padrona, ma spero di esser riuscito a fornirvi quantomeno l'idea degli effetti benefici che i test automatici possono portare alle nostre applicazioni e come si può approcciare il problema.&lt;/p&gt;&lt;p&gt;Per i dettagli, a breve troverete online la nostra applicazione nella versione che abbiamo mostrato (purtroppo a meno che non vogliate scaricare la trunk, quella attualmente in rilascio su codeplex è ancora relativa al passato RCD 4 dello scorso dicembre). Poi spero di trovare il tempo per scrivere nei prossimi giorni qualche post sul blog che vada un po' più a fondo sul tema del testing, non solo in ottica ASP.NET MVC, e magari realizzare qualche piccolo screencast. Non vi prometto nulla, ma ce la metterò tutta.&lt;/p&gt;&lt;p&gt;Ciao!&lt;/p&gt;&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_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2626/Real-Code-Conference-4.0-Debriefing.aspx"&gt;&lt;em&gt;Real Code Conference 4.0: Debriefing...&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Architettura, .NET Framework, .NET Framework 4.0, ASP.NET MVC</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2626/Real-Code-Conference-4.0-Debriefing.aspx</guid><slash:comments>3</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2626/Real-Code-Conference-4.0-Debriefing.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2626.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2626</trackback:ping></item><item><title>Creare un filtro custom per QueryExtender</title><link>http://blogs.aspitalia.com/cradle/post2618/Creare-Filtro-Custom-QueryExtender.aspx</link><pubDate>Mon, 03 May 2010 13:40:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2618" border="0" style="width:1px; height:1px;" /&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;QueryExtender &lt;/strong&gt;è uno strumento molto comodo per modificare le query generate da una &lt;strong&gt;EntityDataSource &lt;/strong&gt;e ciò che lo rende secondo me parecchio potente è la sua espandibilità.&lt;/p&gt;&lt;p&gt;Creare filtri personalizzati è infatti parecchio semplice se si ha un po' di dimistichezza con le lambda expression, visto che, in fin dei conti, non dobbiamo far altro che generare l'espressione desiderata e applicarla alla sorgente. Vediamo un po' nel dettaglio come fare, ad esempio, a realizzare un filtro in cui possiamo specificare il tipo di relazione (&amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;gt;=&amp;quot;, &amp;quot;&amp;lt;&amp;quot;, ecc.) e il termine di comparazione.&lt;/p&gt;&lt;p&gt;Il primo passo è quello di realizzare una classe che erediti da &lt;strong&gt;DataSourceExpression &lt;/strong&gt;o meglio, dato che il nostro filtro dovrà essere parametrico, da &lt;strong&gt;ParameterDataSourceExpression&lt;/strong&gt;, che implementa già tutta la logica necessaria a recuperare i valori dei parametri.&lt;/p&gt;&lt;p&gt;L'unico metodo da realizzare è &lt;strong&gt;GetQueryable&lt;/strong&gt;, che riceve in ingresso un oggetto &lt;strong&gt;IQueryable &lt;/strong&gt;e lo restituisce dopo averne eventualmente modificato l'espressione:&lt;/p&gt;&lt;code&gt;public override IQueryable GetQueryable(IQueryable source)&lt;br /&gt;{&lt;br /&gt;&amp;#xa0;&amp;#xa0;// recupero i parametri grazie alla logica della classe base&lt;br /&gt;&amp;#xa0;&amp;#xa0;var values = this.Parameters.GetValues(this.Context, this.Owner);&lt;br /&gt;&amp;#xa0;&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0;// se non tutti i parametri sono specificati, non faccio nulla&lt;br /&gt;&amp;#xa0;&amp;#xa0;if (values.Count != 2 || values[0] == null || values[1] == null)&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;return null;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0;// .. qui logica per calcolare il filtro ..&lt;br /&gt;}&lt;/code&gt;&lt;p&gt;L'aspetto, se vogliamo, leggermente complesso, è costruire la &lt;strong&gt;LambdaExpression&lt;/strong&gt;, dato che richiede un po' di conoscenza dell'anatomia di questo tipo di oggetti. Immaginiamo di voler scrivere questo tipo di espressione sull'oggetto &lt;strong&gt;Product &lt;/strong&gt;e cerchiamo di capire come scomporla:&lt;/p&gt;&lt;code&gt;p =&amp;gt; p.Amount &amp;lt; 25&lt;/code&gt;&lt;p&gt;Essa contiene:&lt;/p&gt;&lt;p&gt;1) Una &lt;strong&gt;costante &lt;/strong&gt;&amp;quot;25&amp;quot;&lt;/p&gt;&lt;code&gt;var constant = Expression.Constant(25, typeof(int));&lt;/code&gt;&lt;p&gt;2) Un &lt;strong&gt;parametro &lt;/strong&gt;&amp;quot;p&amp;quot; di tipo Product&lt;/p&gt;&lt;code&gt;var parameterExpression = Expression.Parameter(typeof(Product));&lt;/code&gt;&lt;p&gt;3) L'&lt;strong&gt;accesso alla proprietà&lt;/strong&gt; &amp;quot;Amount&amp;quot; di Product&lt;/p&gt;&lt;code&gt;var propertyExpression = Expression.PropertyOrField(parameterExpression, &amp;quot;Amount&amp;quot;);&lt;/code&gt;&lt;p&gt;4) Il &lt;strong&gt;confronto &lt;/strong&gt;&amp;quot;&amp;lt;&amp;quot; tra il risultato del punto (3) e quello del punto (1)&lt;/p&gt;&lt;code&gt;var compare = Expression.LessThan(propertyExpression, constant);&lt;/code&gt;&lt;p&gt;Questo oggetto è il &lt;strong&gt;body &lt;/strong&gt;della nostra lambda expression, ossia tutto ciò che è &lt;strong&gt;a destra&lt;/strong&gt; del simbolo &amp;quot;=&amp;gt;&amp;quot;. Per ottenere l'espressione completa è sufficiente specificare quali sono i &lt;strong&gt;parametri &lt;/strong&gt;che essa dovrà gestire, ossia i membri &lt;strong&gt;a sinistra&lt;/strong&gt; del simbolo &amp;quot;=&amp;gt;&amp;quot; (nel nostro caso Product, e quindi la stessa parameterExpression del punto 2):&lt;/p&gt;&lt;code&gt;var lambda = Expression.Lambda(compare, new ParameterExpression[] { parameterExpression });&lt;/code&gt;&lt;p&gt;Mettendo tutto insieme, il metodo GetQueryable diviene:&lt;/p&gt;&lt;code&gt;public override IQueryable GetQueryable(IQueryable source)&lt;br /&gt;{&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;var values = this.Parameters.GetValues(this.Context, this.Owner);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;if (values.Count != 2 || values[0] == null || values[1] == null)&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0;return null;&lt;br /&gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;// recupero la property su cui effettuare il filtro&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;var parameterExpression =&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;Expression.Parameter(source.ElementType);&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;var propertyExpression =&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;Expression.PropertyOrField(parameterExpression, this.DataField);&lt;br /&gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;// creo il secondo membro dell'expression in base al valore recuperato&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;TypeConverter converter =&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;TypeDescriptor.GetConverter(propertyExpression.Type);&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;var constant =&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;Expression.Constant(converter.ConvertFrom(values[1]), propertyExpression.Type);&lt;br /&gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;// creo l'espressione di confronto&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;var comparisonType = getComparisonType((string)values[0]);&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;var compare =&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;buildCompareExpression(propertyExpression, comparisonType, constant);&lt;br /&gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;// genero la lambdaexpression&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;var lambda =&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;Expression.Lambda(compare, new ParameterExpression[] { parameterExpression });&lt;br /&gt;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0;return source.Provider.CreateQuery(&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0;Expression.Call(&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0;typeof(Queryable), &amp;quot;Where&amp;quot;,&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0; new Type[] { source.ElementType },&amp;#xa0;&lt;br /&gt;&amp;#xa0;&amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0; &amp;#xa0; new Expression[] { source.Expression, Expression.Quote(lambda) }));&lt;br /&gt;}&lt;/code&gt;&lt;p&gt;Alcune cose da notare:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;L'uso di un &lt;strong&gt;TypeConverter &lt;/strong&gt;per convertire il parametro nel tipo desiderato da Expression.Constant;&lt;/li&gt;&lt;li&gt;Il metodo buildCompareExpression non fa altro che valutare l'operatore selezionato dall'utente (&amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot;, ecc.) e costruire l'espressione corrispondente (&amp;quot;Expression.LessThan&amp;quot;, &amp;quot;Expression.GreaterThan&amp;quot;)&lt;/li&gt;&lt;li&gt;L'uso di &lt;strong&gt;Expression.Call&lt;/strong&gt; e di &lt;strong&gt;IQueryProvider.CreateQuery&lt;/strong&gt; per aggiungere una condizione di Where alla IQueryable originale. Questo è necessario perché l'extension method Where è generico e quindi richiede di specificare il tipo, che però nel nostro caso non è noto a priori.&lt;/li&gt;&lt;li&gt;Il fatto che abbiamo realizzato un filtro Where è un qualcosa di strettamente correlato alla nostra particolare implementazione, visto che &lt;strong&gt;non esistono vincoli infrastrutturali&lt;/strong&gt; in tal senso. Morale della favola: nulla ci vieta di implementare una DataSourceExpression per realizzare una Group By.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Il codice dell'esempio è scaricabile &lt;a href="http://blogs.aspitalia.com/img/Cradle/demo_queryextender_filtro_personalizzato/WebApplication3.zip"&gt;qui&lt;/a&gt;, per farlo funzionare vi basta sostituire la connection string con una che punti al database Northwind.&lt;/p&gt;&lt;p&gt;Ciao!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.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_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Databinding/" rel="tag"&gt;Databinding&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Entity_Framework/" rel="tag"&gt;Entity Framework&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2618/Creare-Filtro-Custom-QueryExtender.aspx"&gt;&lt;em&gt;Creare un filtro custom per QueryExtender&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 4.0, Databinding, Entity Framework</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2618/Creare-Filtro-Custom-QueryExtender.aspx</guid><slash:comments>8</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2618/Creare-Filtro-Custom-QueryExtender.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2618.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2618</trackback:ping></item><item><title>ASP.NET MVC 2, ne vale la pena? Secondo me s&amp;#236;!</title><link>http://blogs.aspitalia.com/cradle/post2614/ASP.NET-MVC-Vale-Pena-SI.aspx</link><pubDate>Wed, 28 Apr 2010 05:53:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2614" border="0" style="width:1px; height:1px;" /&gt;
&lt;p&gt;Diciamolo chiaramente: per chi oramai sono anni che lavora con WebForms, passare ad ASP.NET MVC sulle prime può sembrare un ritorno alle origini (se va bene) o un great pain in the ass (se ci siamo svegliati con la luna storta).&lt;/p&gt; &lt;p&gt;Eppure la versione 2, che è disponibile - vale la pena ricordarlo - sia per &lt;strong&gt;Visual Studio 2010&lt;/strong&gt; che per &lt;strong&gt;Visual Studio 2008&lt;/strong&gt;, di novità ne ha portate parecchie, soprattutto dal punto di vista della &lt;strong&gt;produttività&lt;/strong&gt;: strano a dirsi, eh? e invece no! ASP.NET MVC 2 adotta un sistema di templating e di validazione mutuato - udite udite - da ASP.NET Dynamic Data Controls, grazie al quale possiamo &lt;strong&gt;realizzare interfacce complete e complesse veramente nel giro di pochissimo tempo&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Non ci credete? Beh, è una prima ragione per &lt;a href="http://www.aspitalia.com/eventi/27/Real-Code-Conference-4.0-Firenze.aspx"&gt;vederci a Firenze il 25 maggio&lt;/a&gt;, non trovate?&lt;/p&gt; &lt;p&gt;&amp;quot;Sì&amp;quot;, direte voi, &amp;quot;ottimo. Ma *perché* ASP.NET MVC? Chi me lo fa fare?&amp;quot;&lt;/p&gt; &lt;p&gt;La risposta è, ironia su ironia, un'altra domanda: &amp;quot;Scrivete &lt;strong&gt;test automatici&lt;/strong&gt; per il vostro codice?&amp;quot; &lt;/p&gt; &lt;p&gt;Se sì, magari parliamo di come testate le vostre pagine WebForms, giuro che mi interessa! E comunque valutate ASP.NET MVC, può veramente semplificare il vostro lavoro!&lt;/p&gt; &lt;p&gt;Se no, prendete in *seria* considerazione l'idea di iniziare! Magari proprio con ASP.NET MVC 2!&lt;/p&gt; &lt;p&gt;In entrambi i casi, proprio il testing è la seconda ragione per &lt;a href="http://www.aspitalia.com/eventi/27/Real-Code-Conference-4.0-Firenze.aspx"&gt;vederci a Firenze il 25 maggio&lt;/a&gt;. Perché secondo me parlare di MVC senza far vedere il testing è come andare a cena al ristorante e pagare il conto senza mangiare.&lt;/p&gt; &lt;p&gt;Morale della favola: ho pensato che alla &lt;a href="http://www.aspitalia.com/eventi/27/Real-Code-Conference-4.0-Firenze.aspx"&gt;Real Code Conference 4.0&lt;/a&gt; sarebbe stato interessante far vedere come scrivere un'applicazione real world con ASP.NET MVC 2 e decorarla con una bella suite di test automatici per ognuno dei suoi layer. D'altronde siamo nel 2010 no?&lt;/p&gt; &lt;p&gt;Ciao!&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_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2614/ASP.NET-MVC-Vale-Pena-SI.aspx"&gt;&lt;em&gt;ASP.NET MVC 2, ne vale la pena? Secondo me s&amp;#236;!&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2614/ASP.NET-MVC-Vale-Pena-SI.aspx"&gt;&lt;em&gt;ASP.NET MVC 2, ne vale la pena? Secondo me s&amp;amp;#236;!&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>ASP.NET, ASP.NET MVC</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2614/ASP.NET-MVC-Vale-Pena-SI.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2614/ASP.NET-MVC-Vale-Pena-SI.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2614.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2614</trackback:ping></item><item><title>Ma che figo Reflector Pro di Red Gate</title><link>http://blogs.aspitalia.com/cradle/post2608/Figo-Reflector-Red-Gate.aspx</link><pubDate>Thu, 08 Apr 2010 22:47:25 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2608" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Come molti di voi sapranno, qualche mese fa &lt;a href="http://www.red-gate.com/"&gt;Red Gate&lt;/a&gt; ha acquistato &lt;a href="http://www.red-gate.com/products/reflector/index.htm"&gt;Reflector&lt;/a&gt;, il tool che, dopo Visual Studio, ogni sviluppatore .NET dovrebbe avviare quando si siede davanti al PC.&lt;/p&gt; &lt;p&gt;Da allora, alla versione tradizionale che è rimasta gratuita, si è aggiunto anche Reflector Pro, un'edizione a pagamento che promette cose mirabolanti. Volete un esempio? Sentite un po'.&lt;/p&gt; &lt;p&gt;Ho creato una semplice ConsoleApplication in C#, in cui ho messo questo codice:&lt;/p&gt; &lt;code&gt;List&amp;lt;string&amp;gt; someList = new List&amp;lt;string&amp;gt;(); &lt;br /&gt;someList.Add(&amp;quot;Ciao&amp;quot;);&lt;/code&gt; &lt;p&gt;Dopo aver installato Reflector Pro, in Visual Studio appare un nuovo menu, dal quale possiamo selezionare la voce &lt;strong&gt;Chose Assemblies to Debug&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/machefigoreflectorprodiredgate_b43/image_3.png" width="369" height="154" /&gt; &lt;/p&gt; &lt;p&gt;A questo punto, dalla finestra di Reflector, selezioniamo di voler debuggare &lt;strong&gt;mscorlib&lt;/strong&gt;, ossia l'assembly che contiene la definizione della classe &lt;strong&gt;List&lt;/strong&gt;:&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/machefigoreflectorprodiredgate_b43/image_5a845fd0-0f55-4616-9886-5c8139085fe0.png" width="442" height="322" /&gt; &lt;/p&gt; &lt;p&gt;Ciò che accade, è che Reflector inizia la decompilazione dell'assembly; nel nostro caso impiega qualche minuto, visto che si tratta di parecchio codice, ma esiste uno storage interno che funge da cache per queste definizioni, così che non sia necessario ripetere l'operazione. Al termine di tutto, mettiamo un breakpoint sulla seconda riga del nostro codice ed avviamo l'applicazione in debug:&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/machefigoreflectorprodiredgate_b43/image_502e8894-0dbe-435b-8533-a58c12c6deca.png" width="493" height="57" /&gt;&amp;#160; &lt;/p&gt; &lt;p&gt;Quando l'esecuzione si ferma sulla riga evidenziata, premiamo F11 e...&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/machefigoreflectorprodiredgate_b43/image_e14d8159-c258-49d6-9820-41bd84d4c85c.png" width="400" height="236" /&gt; &lt;/p&gt; &lt;p&gt;Notate il nome della classe in alto :-) Siamo andati in Step In dentro al codice del metodo &lt;strong&gt;Add&lt;/strong&gt; di &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt; e possiamo avvalerci di tutte le funzionalità del debug di Visual Studio, dai watch (come si vede in figura) a che so... il debug multithreading di cui ho parlato ieri, mentre procediamo in step by step all'interno di mscorlib.dll.&lt;/p&gt; &lt;p&gt;Mica male!!&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/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2608/Figo-Reflector-Red-Gate.aspx"&gt;&lt;em&gt;Ma che figo Reflector Pro di Red Gate&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, Visual Studio</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2608/Figo-Reflector-Red-Gate.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2608/Figo-Reflector-Red-Gate.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2608.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2608</trackback:ping></item><item><title>Multithreading e parallel computing nel .NET Framework 4.0</title><link>http://blogs.aspitalia.com/cradle/post2607/Multithreading-Parallel-Computing-.NET-Framework-4.0.aspx</link><pubDate>Wed, 07 Apr 2010 23:40:41 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2607" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Una delle novità dell'imminente nuova versione del .NET Framework a cui personalmente ho dato parecchia importanza è il notevole supporto per &lt;strong&gt;multithreading&lt;/strong&gt; e &lt;strong&gt;parallel computing&lt;/strong&gt;. Spesso siamo abituati a confondere questi due termini e a usarli quasi come sinonimi, anche se sinonimi veri e propri non sono. Il multithreading è un qualcosa che è sui nostri desktop già da diversi anni, supportato dal Framework sin dalle sue prime incarnazioni. Il calcolo parallelo è invece qualcosa di più, che sfrutta il multithreading per massimizzare l'uso dei core messi a disposizione dall'hardware, un aspetto fondamentale nel momento in cui anche sui laptop non è raro imbattersi in 4, 6 o 8 core.&lt;/p&gt; &lt;p&gt;Ho avuto modo di occuparmi di questi aspetti durante la stesura di uno dei capitoli dei &lt;a href="http://g.aspitalia.com/landings/hoepli.aspx"&gt;nostri libri di prossima uscita&lt;/a&gt; interamente dedicato alle tematiche di multithreading e parallel computer, e penso francamente che il .NET Framework 4.0, il nuovo CLR e Visual Studio 2010 portino l'esperienza di sviluppo di applicazioni parallele a livelli assolutamente ineguagliati al giorno d'oggi.&lt;/p&gt; &lt;p&gt;Ma quali sono sostanzialmente queste novità? Beh. innanzitutto direi la presenza di &lt;a href="http://msdn.microsoft.com/en-us/library/dd460688%28VS.100%29.aspx"&gt;PLINQ&lt;/a&gt; e della classe &lt;a href="http://msdn.microsoft.com/en-us/library/dd383736%28VS.100%29.aspx"&gt;ParallelQuery&lt;/a&gt;, grazie alla quale è possibile integrare con grandissima facilità il calcolo parallelo all'interno delle nostre query LINQ; basta usare infatti l'extension method &lt;a href="http://msdn.microsoft.com/en-us/library/dd413602%28VS.100%29.aspx"&gt;AsParallel()&lt;/a&gt; per far sì che una query del tipo&lt;/p&gt; &lt;code&gt;var query = from i in list.AsParallel() &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; where someCondition(i) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; select someResult(i)&lt;/code&gt; &lt;p&gt;venga eseguita sfruttando al massimo i core presenti nel sistema.&lt;/p&gt; &lt;p&gt;Per il codice "di tutti i giorni", invece, sono state introdotte le classi &lt;a href="http://msdn.microsoft.com/en-us/library/dd321424%28VS.100%29.aspx"&gt;Task&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/dd321260%28VS.100%29.aspx"&gt;TaskFactory&lt;/a&gt;, che rendono possibile creare task asincroni, gestirne le notifiche, accodarne di altri, ecc.. in una sintassi estremamente concisa e intuitiva, che ci risparmia un bel po' di lavoro manuale che eravamo costretti a svolgere usando il &lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx"&gt;ThreadPool&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ma più thread contemporaneamente in esecuzione vuol dire anche gestire problematiche di concorrenza e di thread safety. Chi ha lavorato in quest'ambito in passato, sa che ad esempio avere a che fare con collection condivise tra più thread non era assolutamente banale. Il .NET Framework 4.0 espone un nuovo namespace, dal nome fin troppo indicativo: &lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.concurrent%28VS.100%29.aspx"&gt;System.Collections.Concurrent&lt;/a&gt;. Esso contiene un gran numero di collection, tutte rigorosamente thread safe, che risparmiano parecchie grane quando utilizzate in scenari paralleli e i cui internals (basta dare un'occhiata con Reflector) sono tutt'altro che banali e scontati, con lo scopo di minimizzare i lock, che notoriamente vanno a braccetto con decadimenti prestazionali.&lt;/p&gt; &lt;p&gt;E la ciliegina su questa torta non poteva che essere lui, Visual Studio 2010, e il suo supporto al debug di applicazioni multithreaded. Provate a dare un'occhiata a queste due immagini in basso per capire di cosa sto parlando, valgono più di mille parole:&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/multithreadingeparallelcomputingnel.ne.0_1315c/image_3.png" width="484" height="334" /&gt; &lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/multithreadingeparallelcomputingnel.ne.0_1315c/image_6.png" width="485" height="193" /&gt; &lt;/p&gt; &lt;p&gt;Che dire. ci aspettano non solo mesi di articoli e succose novità, ma anche mesi in cui potremo sfruttare strumenti innovativi, in grado di darci una grande mano nel lavoro di tutti i giorni e, perché no, anche vantaggi sostanziali nelle potenzialità delle nostre applicazioni!&lt;/p&gt; &lt;p&gt;Ci vediamo su queste pagine!&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_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/C#_4_Guida_completa/" rel="tag"&gt;C# 4 Guida completa&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Basic_2010_Guida_completa/" rel="tag"&gt;Visual Basic 2010 Guida completa&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2607/Multithreading-Parallel-Computing-.NET-Framework-4.0.aspx"&gt;&lt;em&gt;Multithreading e parallel computing nel .NET Framework 4.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) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 4.0, C# 4 Guida completa, Visual Basic 2010 Guida completa, Visual Studio</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2607/Multithreading-Parallel-Computing-.NET-Framework-4.0.aspx</guid><slash:comments>3</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2607/Multithreading-Parallel-Computing-.NET-Framework-4.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2607.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2607</trackback:ping></item><item><title>Rilasciato ASP.NET MVC 2 Beta</title><link>http://blogs.aspitalia.com/cradle/post2571/Rilasciato-ASP.NET-MVC-Beta.aspx</link><pubDate>Tue, 17 Nov 2009 23:58:01 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2571" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;I primi effetti di PDC iniziano a farsi vedere: è stata rilasciata oggi, infatti, la beta di ASP.NET MVC 2 (solo per VS2008) che introduce alcune novità rispetto alla Preview 2 presente in Visual Studio 2010 Beta 2. Cerchiamo di vedere cosa cambia e quali sono le nuove funzionalità disponibili con questa nuova versione:&lt;/p&gt; &lt;h3&gt;Validazione Client-side&lt;/h3&gt; &lt;p&gt;La Preview 2 già aveva introdotto un supporto built-in per la validazione client-side, utilizzando un opportuno plugin per jQuery. Nella versione Beta, invece, questa funzionalità è compresa all'interno delle librerie Javascript di Microsoft, pertanto è sufficiente includere&lt;/p&gt; &lt;ul&gt; &lt;li&gt;MicrosoftAjax.js &lt;/li&gt; &lt;li&gt;MicrosoftMVCAjax.js &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;e richiamare il metodo&lt;/p&gt; &lt;p&gt;&lt;code&gt;&amp;lt;% Html.EnableClientValidation(); %&amp;gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;dalla View, affinché tutto funzioni.&lt;/p&gt; &lt;h3&gt;Add Area&lt;/h3&gt; &lt;p&gt;Il menù contestuale di un progetto MVC all'interno del solution explorer consente adesso di aggiungere in maniera guidata una nuova area all'interno dell'applicazione. Ricordiamo che le Area altro non sono che una suddivisione logica del progetto stesso in più sottocartelle, una per ogni "modulo", all'interno delle quali trova posto la struttura di cartelle standard di MVC (Views, Controllers, Models)&lt;/p&gt; &lt;h3&gt;Modifiche al funzionamento dei TempData&lt;/h3&gt; &lt;p&gt;TempData, come già abbiamo indicato nello script &lt;a href="http://www.aspitalia.com/liste/usag/script.aspx?id=989"&gt;#989&lt;/a&gt;, consente di mantenere momentaneamente in uno storage (per default la session di ASP.NET) alcuni dati, che vengono poi automaticamente rimossi al ciclo di request response successivo. In MVC 2 Beta, invece, questi dati restano memorizzati fino al loro effettivo utilizzo, dopo di che vengono automaticamente marcati per l'eliminazione. Il metodo &lt;strong&gt;Keep&lt;/strong&gt; consente comunque di conservarli anche se sono stati utilizzati.&lt;/p&gt; &lt;h3&gt;Strong typed UI Helpers&lt;/h3&gt; &lt;p&gt;Già nelle preview 2 erano presenti i primi 3 esempi di UI Helpers (Editor, Label e Display) che, sfruttando le lambda expression, rendevano possibile la creazione di elementi di interfaccia collegati a proprietà del model in maniera strong typed e con il supporto di Intellisense e Refactoring di Visual Studio. Grazie ad essi, ad esempio, si può generare un elemento Input per una proprietà Descrizione del model tramite la sintassi&lt;/p&gt; &lt;p&gt;&lt;code&gt;&amp;lt;%= Html.EditorFor(m =&amp;gt; m.Descrizione) %&amp;gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;In questa nuova versione sono stati aggiunti anche&lt;/p&gt; &lt;ul&gt; &lt;li&gt;ValidationMessageFor &lt;/li&gt; &lt;li&gt;TextAreaFor &lt;/li&gt; &lt;li&gt;TextBoxFor &lt;/li&gt; &lt;li&gt;HiddenFor &lt;/li&gt; &lt;li&gt;DropDownListFor &lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Esecuzione asincrona delle action tramite un AsyncController&lt;/h3&gt; &lt;p&gt;ASP.NET MVC 2 Beta introduce ufficialmente una interessantissima caratteristica che, fino ad oggi, è stata parte del progetto sperimentale ASP.NET MVC Futures. Tramite la classe base AsyncController, infatti, è ora possibile realizzare Action in grado di invocare metodi asincroni, la cui esecuzione viene presa in carico da un worker thread esterno a quello utilizzato da ASP.NET.&lt;/p&gt; &lt;h3&gt;Download&lt;/h3&gt; &lt;p&gt;Il download di questa nuova versione di ASP.NET MVC 2 è disponibile a &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;familyid=4817cdb2-88ea-4af4-a455-f06b4c90fd2c"&gt;questo link&lt;/a&gt;, dove trovate anche le note di rilascio. Un'ultima nota riguarda la compatibilità con le versioni di Visual Studio. E' supportato il solo Visual Studio 2008 SP1, quindi niente versione 2010 per il momento. Tra l'altro, visto che 2008 e 2010 condividono alcune componenti, l'installazione anche sul solo 2008 &lt;strong&gt;non è supportata se risulta installata anche la versione 2010 Beta 2&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Enjoy!&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_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&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/cradle/post2571/Rilasciato-ASP.NET-MVC-Beta.aspx"&gt;&lt;em&gt;Rilasciato ASP.NET MVC 2 Beta&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 4.0, ASP.NET 4.0, ASP.NET MVC, Visual Studio, ASP.NET</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2571/Rilasciato-ASP.NET-MVC-Beta.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2571/Rilasciato-ASP.NET-MVC-Beta.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2571.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2571</trackback:ping></item></channel></rss>
