<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Tip</title>
        <link>http://blogs.ugidotnet.org/matteomigliore/category/3167.aspx</link>
        <description>Tip</description>
        <language>it-IT</language>
        <copyright>Matteo Migliore</copyright>
        <managingEditor>matteo.migliore@gmail.com</managingEditor>
        <generator>Subtext Version 2.0.0.43</generator>
        <item>
            <title>[ASP.NET] Validare i controlli della pagina dato il ValidationGroup</title>
            <link>http://blogs.ugidotnet.org/matteomigliore/archive/2008/04/10/asp.net-validare-i-controlli-della-pagina-secondo-il-validationgroup.aspx</link>
            <description>&lt;p&gt;Posto questi due metodi perchè ho trovato divertente riuscire a rendere il codice così striminzito grazie a C# 3.0 e alla ricorsione: &lt;/p&gt;
&lt;div class="csharpcode2"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;  &lt;span class="kwrd2"&gt;private&lt;/span&gt; &lt;span class="kwrd2"&gt;void&lt;/span&gt; ValidateByGroup(&lt;span class="kwrd2"&gt;string&lt;/span&gt; validationGroup) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;   List&amp;lt;BaseValidator&amp;gt; validators = &lt;span class="kwrd2"&gt;new&lt;/span&gt; List&amp;lt;BaseValidator&amp;gt;(from validator &lt;span class="kwrd2"&gt;in&lt;/span&gt; FindControlsByType&amp;lt;BaseValidator&amp;gt;(&lt;span class="kwrd2"&gt;this&lt;/span&gt;)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                    &lt;span class="kwrd2"&gt;where&lt;/span&gt; validator.ValidationGroup == validationGroup select validator);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;   validators.ForEach(validator =&amp;gt; validator.Validate());&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;  }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;  &lt;span class="kwrd2"&gt;private&lt;/span&gt; &lt;span class="kwrd2"&gt;static&lt;/span&gt; IList&amp;lt;T&amp;gt; FindControlsByType&amp;lt;T&amp;gt;(Control root) &lt;span class="kwrd2"&gt;where&lt;/span&gt; T: Control {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;   List&amp;lt;T&amp;gt; controls = &lt;span class="kwrd2"&gt;new&lt;/span&gt; List&amp;lt;T&amp;gt;();   &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;   &lt;span class="kwrd2"&gt;foreach&lt;/span&gt; (Control child &lt;span class="kwrd2"&gt;in&lt;/span&gt; root.Controls) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    Type type = child.GetType().BaseType;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd2"&gt;while&lt;/span&gt;(type != &lt;span class="kwrd2"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd2"&gt;object&lt;/span&gt;)){&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;     &lt;span class="kwrd2"&gt;if&lt;/span&gt; (type == &lt;span class="kwrd2"&gt;typeof&lt;/span&gt;(T))&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;     {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;      controls.Add((T)child);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;      &lt;span class="kwrd2"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;     }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;     type = type.BaseType;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    &lt;span class="kwrd2"&gt;if&lt;/span&gt; (child.HasControls())&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;     controls.AddRange(FindControl&amp;lt;T&amp;gt;(child));&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;   }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;   &lt;span class="kwrd2"&gt;return&lt;/span&gt; controls;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;  }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
Perchè funzioni è necessario disabilitare il controllo lato client impostando a False la proprietà EnableClientScript dei validator. Per rendere comunque la pagina reattiva sarebbe bene sfruttare AJAX perchè in questo modo il controllo verrà fatto solo lato server. &lt;br /&gt;
&lt;br /&gt;
Matteo Migliore.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/matteomigliore/aggbug/92157.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matteo Migliore</dc:creator>
            <guid>http://blogs.ugidotnet.org/matteomigliore/archive/2008/04/10/asp.net-validare-i-controlli-della-pagina-secondo-il-validationgroup.aspx</guid>
            <pubDate>Thu, 10 Apr 2008 10:21:06 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/matteomigliore/comments/92157.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/matteomigliore/archive/2008/04/10/asp.net-validare-i-controlli-della-pagina-secondo-il-validationgroup.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/matteomigliore/comments/commentRss/92157.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/matteomigliore/services/trackbacks/92157.aspx</trackback:ping>
        </item>
        <item>
            <title>[Tip] Versioning degli Assembly di una stessa solution</title>
            <link>http://blogs.ugidotnet.org/matteomigliore/archive/2008/01/12/tip-versioning-degli-assembly-di-una-stessa-solution.aspx</link>
            <description>&lt;p&gt;Un semplice tip che mi ha consigliato &lt;a title="Blog: Mauro Servienti" href="http://blogs.ugidotnet.org/topics/"&gt;Mauro&lt;/a&gt; per il versioning degli assembly a cui non avevo pensato, ma utile per avere un repository comunue delle informazioni relative alla società, nome e versione del prodotto e altre informazioni. In pratica anzichè definire un file AssemblyInfo.cs (o .vb) per ogni progetto, si crea un file condiviso in tutta la soluzione (o più soluzioni) e lo si referenzia in ogni project come link.&lt;br /&gt;
&lt;br /&gt;
In questo modo tutti gli assembly avranno associate le stesse informazioni, potendo ovviamente redefinire quelle specifiche e legate al project.&lt;br /&gt;
&lt;br /&gt;
Qui trovate come fare:&lt;br /&gt;
&lt;a title="Versioning Groups of Assemblies in sync on Loren Halvorson Blog" href="http://weblogs.asp.net/lorenh/archive/2004/09/20/232200.aspx"&gt;http://weblogs.asp.net/lorenh/archive/2004/09/20/232200.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
La condivisione delle informazioni è utile specialmente se utilizzata nella metodologia del &lt;a title="Continuous Integration on Wikipedia" href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;Continuous Integration&lt;/a&gt;, uno dei pilastri dell'&lt;a title="Extreme Programming on Wikipedia" href="http://en.wikipedia.org/wiki/Extreme_Programming"&gt;Extreme Programming&lt;/a&gt;. Uno dei sostenitori? Il mitico &lt;a title="Continuous Integration by Martin Fowler" href="http://www.martinfowler.com/articles/continuousIntegration.html"&gt;Martin Fowler&lt;/a&gt;, amato da &lt;a title="Blog: Andrea Saltarello" href="http://blogs.ugidotnet.org/pape"&gt;Andrea&lt;/a&gt; (anche se lui dice di no &lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif" /&gt;).&lt;br /&gt;
&lt;br /&gt;
Un tool che assiste la pratica del Continuos Integration è &lt;a title="Cruise Control .NET" href="http://ccnet.thoughtworks.com/"&gt;Cruise Control .NET&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Matteo Migliore.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/matteomigliore/aggbug/90671.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matteo Migliore</dc:creator>
            <guid>http://blogs.ugidotnet.org/matteomigliore/archive/2008/01/12/tip-versioning-degli-assembly-di-una-stessa-solution.aspx</guid>
            <pubDate>Sat, 12 Jan 2008 21:43:42 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/matteomigliore/comments/90671.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/matteomigliore/archive/2008/01/12/tip-versioning-degli-assembly-di-una-stessa-solution.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/matteomigliore/comments/commentRss/90671.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/matteomigliore/services/trackbacks/90671.aspx</trackback:ping>
        </item>
    </channel>
</rss>