<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetmarche.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>moleskine di un programmatore : code</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx</link><description>Tags: code</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>FakeCloneTree 0.0.1.0</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/06/07/fakeclonetree-0-0-1-0.aspx</link><pubDate>Sun, 07 Jun 2009 04:55:53 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:5324</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=5324</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/06/07/fakeclonetree-0-0-1-0.aspx#comments</comments><description>&lt;p&gt;Just committed the initial release of FakeCloneTree, a simple command line tool for cloning a folder tree in a zero byte length copy.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DISCLAIMER: &lt;u&gt;use at your own risk. this is just an internal util for myself&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Use&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/image_4247A246.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/image_thumb_683FE34D.png" width="647" height="143" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Result&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/image_67251725.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/image_thumb_782E666A.png" width="295" height="383" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/image_7BD1A2A9.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/image_thumb_0CDAF1EF.png" width="295" height="383" /&gt;&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Sources: &lt;a title="https://dotnetmarcheproject.googlecode.com/svn/trunk/src/Projects/FakeCloneTree" href="http://dotnetmarcheproject.googlecode.com/svn/trunk/src/Projects/FakeCloneTree"&gt;http://dotnetmarcheproject.googlecode.com/svn/trunk/src/Projects/FakeCloneTree&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Binary: &lt;a title="http://dotnetmarche.org/blogs/andreabalducci/Code/FakeCloneTree/FakeCloneTree%200.0.1.0.zip" href="http://dotnetmarche.org/blogs/andreabalducci/Code/FakeCloneTree/FakeCloneTree%200.0.1.0.zip"&gt;http://dotnetmarche.org/blogs/andreabalducci/Code/FakeCloneTree/FakeCloneTree%200.0.1.0.zip&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=5324" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/tool/default.aspx">tool</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/DotNetMarche/default.aspx">DotNetMarche</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/opensource/default.aspx">opensource</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/sysadmin/default.aspx">sysadmin</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/too/default.aspx">too</category></item><item><title>FakeCloneTree</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/06/05/fakeclonetree.aspx</link><pubDate>Fri, 05 Jun 2009 13:20:16 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:5322</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=5322</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/06/05/fakeclonetree.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;I’ve to test a massive document import from an external system and I want to test on my dev machine before going to the servers. I’ve to deal with filename analysis (the have the key to the business logic of the external legacy system) so I need to clone the client’s storage for a real massive test.&lt;/p&gt;  &lt;p&gt;So I decided to build a simple console app to clone the source tree with zero length file (cannot upload 10+gb over the net) to mimic the production environment (to be sure no one file has naming rules nobody told me).&lt;/p&gt;  &lt;p&gt;Here the code snapshot. Planning to build a public os utils with zip compression to create a single compressed fake folder tree.&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:ad890fad-5d01-4f25-9bdf-526e71c184b7" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#000000;"&gt;        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; DoClone(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; baseFolder, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; destinationFolder)
        {
            &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; clone folders tree&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;Directory.Exists(destinationFolder))
                Directory.CreateDirectory(destinationFolder);

            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] folders &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Directory.GetDirectories(baseFolder);

            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (var folder &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt; folders)
            {
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; dn &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; folder.Remove(&lt;/span&gt;&lt;span style="color:#800080;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;, baseFolder.Length&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; dest &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Path.Combine(destinationFolder, dn);
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;Directory.Exists(dest))
                    Directory.CreateDirectory(dest);

                &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; recursion...&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;                DoClone(folder, dest);
            }

            &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; create fake files&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] files &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Directory.GetFiles(baseFolder);
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (var file &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt; files)
            {
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; dest &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; Path.Combine(destinationFolder, Path.GetFileName(file));

                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;File.Exists(dest))
                    File.CreateText(dest).Close();
            }
        }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=5322" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/proximo/default.aspx">proximo</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/util/default.aspx">util</category></item><item><title>Introducing ABAnalyzer, an Apache Bench runner and analyzer</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/04/24/introducing-abanalyzer-an-apache-bench-runner-and-analyzer.aspx</link><pubDate>Fri, 24 Apr 2009 14:47:49 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:5188</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=5188</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/04/24/introducing-abanalyzer-an-apache-bench-runner-and-analyzer.aspx#comments</comments><description>&lt;p&gt;In the last few days I&amp;#39;ve read a lot of blog post about Asp.Net MVC Performance. Following the &lt;a href="http://codeclimber.net.nz/archive/2009/04/17/the-performances-implications-of-the-expression-tree-based-actionlink-helper.aspx" target="_blank"&gt;Simone’s&lt;/a&gt; post and &lt;a href="http://blog.whiletrue.com/2009/04/aspnet-mvc-performance" target="_blank"&gt;Rudi’s&lt;/a&gt; post i started to test the Asp.Net MVC engine. First of all i wanted to test using the same &lt;a href="http://httpd.apache.org/docs/2.2/programs/ab.html" target="_blank"&gt;Apache Bench Tool&lt;/a&gt; used by Rudi and wanted to store and compare different results.&lt;/p&gt;  &lt;p&gt;After playing with the command prompt a little I started a quick &amp;amp; dirty test runner with c# (I’m working all day with c++ &amp;amp;&amp;amp; MFC so I’m always looking for a way to write some .Net code ; D ) and the result is … ABAnalyzer&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/image_035345FC.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/image_thumb_44212E2C.png" width="662" height="360" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I want to test the performances of client-side rendering vs server-side rendering so i want to monitor the overall “Request per second” and “Document length” meters. The source code is published in the public &lt;a href="http://code.google.com/p/dotnetmarcheproject" target="_blank"&gt;code repository of DotNetMarche&lt;/a&gt; hosted by Google Code so you can download and play with it (maybe adding functionalities you need). The solution has 2 projects the frontend gui and the services layer (bench runner, analyzer, simple storage) so you can use ABAnalyzer.Services to write your own test tool.&lt;/p&gt;  &lt;p&gt;This is the first release (there are few minor bugs I’ve to fix as I can) with just the minimum functionalities I needed to run my tests.&lt;/p&gt;  &lt;p&gt;If you want to play with the tool just download the precompiled release (link at the end of this post).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How it works&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The “Loaded tests” combo is the list of the test in the current archive (currently only one archive containing an arbitrary number of test addresses); just enter “google” as the test name (and graph label) and fill the others values following the shapshot.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/image_576B65E8.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/image_thumb_1A6EE669.png" width="666" height="372" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Note: use with care, don’t hammer any website! Stress test should be on local servers.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The “Bootstrap” flag fire a single request before running the test to the test address (to bootstrap the appdomain without affecting the results). The “Add” button just append the test in current list (only one test for single key is allowed), “Start” add the test and run immediately spanning a new process for ab.exe.&lt;/p&gt;  &lt;p&gt;The result is shown in plain text (what in the sources I call RawData) (just have to select the test in the combo.. to fix)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/image_070B537F.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/image_thumb_0F251085.png" width="671" height="308" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The two indicators I want to check are displayed using the &lt;a href="http://code.msdn.microsoft.com/mschart" target="_blank"&gt;Microsoft Chart Control&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/image_786CB967.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/image_thumb_368AF57B.png" width="457" height="443" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Redo the test with ibm.com, microsoft.com; now you have 3 loaded test to analyze just for fun: we’ll use the tool to test the same local page and measure the performances of our Asp.NET MVC after each code optimization.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/image_6509267D.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/image_thumb_79B32150.png" width="539" height="524" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Download:&lt;/strong&gt;&amp;#160;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/Code/ABAnalyzer/ABRelease-0.1.0.0.zip" target="_blank"&gt;ABRelease-0.1.0.0.zip&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=5188" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/DotNetMarche/default.aspx">DotNetMarche</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/dev/default.aspx">dev</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/opensource/default.aspx">opensource</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/performance/default.aspx">performance</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Apache+Bench/default.aspx">Apache Bench</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category></item><item><title>Wrong parent &gt; child selector result in jquery-1.3.2-vsdoc2.js</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/04/13/wrong-parent-gt-child-selector-result-in-jquery-1-3-2-vsdoc2-js.aspx</link><pubDate>Mon, 13 Apr 2009 06:12:00 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:5170</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=5170</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/04/13/wrong-parent-gt-child-selector-result-in-jquery-1-3-2-vsdoc2-js.aspx#comments</comments><description>&lt;p&gt;While i was developing a simple demo for a friend of mine i found a bug on the &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; annotated script for VS intellisense. I found that the parent &amp;gt; child selector give bad results. I issued the bug on &lt;a href="http://dev.jquery.com/"&gt;jQuery bug tracker&lt;/a&gt; and today i want to move first steps with &lt;a href="http://docs.jquery.com/QUnit"&gt;QUnit&lt;/a&gt; to create a non regression test for my demo.&lt;/p&gt;  &lt;p&gt;First of all i created a simple html page with two span, one inside a div and one outside.&lt;/p&gt;  &lt;div style="margin:0px;padding:0px;display:inline;float:none;" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:1c47a2f2-f1aa-4bee-9ffe-c8b3357cc2e3" class="wlWriterEditableSmartContent"&gt;&lt;pre style="overflow:auto;white-space:pre-wrap;"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; test &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&amp;quot;container&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Inside div&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Outside div&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then added all the stuff for testing&lt;/p&gt;

&lt;div style="margin:0px;padding:0px;display:inline;float:none;" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:55df909b-3ddc-4aae-bcb9-e5bd8b8c70f2" class="wlWriterEditableSmartContent"&gt;&lt;pre style="overflow:auto;white-space:pre-wrap;"&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; test &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;title&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;text/javascript&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;http://jqueryjs.googlecode.com/files/jquery-1.3.2.js&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;script&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;link rel&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;stylesheet&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;http://dev.jquery.com/view/trunk/qunit/testsuite.css&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;text/css&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; media&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;screen&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;text/javascript&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;http://jqueryjs.googlecode.com/svn/trunk/qunit/testrunner.js&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;script&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;text/javascript&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;        $(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;(){&lt;br /&gt;&lt;br /&gt;            test(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;inside span&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;() {&lt;br /&gt;                expect(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;);&lt;br /&gt;                &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; list &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;#container &amp;gt; span&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;);&lt;br /&gt;                equals( list.length, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;span count inside the div = 1&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; );&lt;br /&gt;                equals( list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].innerHTML, &lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;Inside div&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;innerHTML of inside span&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; );&lt;br /&gt;            });&lt;br /&gt;            &lt;br /&gt;            test(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;outside span&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;() {&lt;br /&gt;                expect(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;);&lt;br /&gt;                &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; list &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;).not(&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;#container &amp;gt; span&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;);&lt;br /&gt;                equals( list.length, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;span count outside the div = 1&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; );&lt;br /&gt;                equals( list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].innerHTML, &lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;Outside div&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;innerHTML of outside span&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; );&lt;br /&gt;            });&lt;br /&gt;            &lt;br /&gt;            test(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;all span&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;() {&lt;br /&gt;                &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; list &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;);&lt;br /&gt;                equals( list.length, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;all span count = 2&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; );&lt;br /&gt;            });&lt;br /&gt;        });&lt;br /&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;script&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;head&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Inside div&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;span&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;div&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;Outside div&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;span&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;test_results&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;QUnit example&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;h1&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h2 id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;banner&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;h2&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h2 id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;userAgent&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;h2&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ol id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;tests&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;ol&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;div&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;div&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;body&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;html&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Let’s run the test opening the page in the browser&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/testok_7801BFFA.jpg"&gt;&lt;img src="http://dotnetmarche.org/blogs/andreabalducci/testok_thumb_6FAC8D22.jpg" style="border:0px none;display:inline;" title="test ok" alt="test ok" border="0" height="553" width="561" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now let’s switch to –vsdoc2.js annotated file and re-run the tests…&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/testfail_10B4D10E.jpg"&gt;&lt;img src="http://dotnetmarche.org/blogs/andreabalducci/testfail_thumb_7DAB0656.jpg" style="border:0px none;display:inline;" title="test fail" alt="test fail" border="0" height="557" width="565" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The ‘#container &amp;gt; span’ selector returns all the span in the page!&lt;/p&gt;&lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/Code/jquery_vs_selector_bug/jquery-selector.zip" title="code"&gt;Code&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dev.jquery.com/ticket/4520"&gt;Ticket &lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=5170" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/test/default.aspx">test</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/QUnit/default.aspx">QUnit</category></item><item><title>Quick &amp; Dirty: Change email addresses in Gravatar icons with jQuery</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/04/08/quick-amp-dirty-change-email-addresses-in-gravatar-icons-with-jquery.aspx</link><pubDate>Tue, 07 Apr 2009 22:41:13 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:5148</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=5148</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/04/08/quick-amp-dirty-change-email-addresses-in-gravatar-icons-with-jquery.aspx#comments</comments><description>&lt;p&gt;Warming up this morning with a code snippet: we want to change the mailto: link in a gravatar enabled link using jQuery. First of all surf to &lt;a title="http://en.gravatar.com/site/implement/url" href="http://en.gravatar.com/site/implement/url"&gt;http://en.gravatar.com/site/implement/url&lt;/a&gt; to understand how the gravatar link is formed. So we need ad md5 of our email addresses, just go to &lt;a title="http://www.semnanweb.com/jquery-plugin/md5.html" href="http://www.semnanweb.com/jquery-plugin/md5.html"&gt;http://www.semnanweb.com/jquery-plugin/md5.html&lt;/a&gt; and download the MD5 plugin for jquery.&lt;/p&gt;  &lt;p&gt;All we need to do is just find all the mailto link using a simple selector $(&amp;#39;a[href^=\&amp;quot;mailto\&amp;quot;]&amp;#39;) and then manipulate the content.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:3bd89b46-9de4-447d-8955-d5d081a236f9" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;overflow:auto;"&gt;&lt;span style="color:#000000;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;DOCTYPE html PUBLIC &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;-//W3C//DTD XHTML 1.0 Transitional//EN&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;html xmlns&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;http://www.w3.org/1999/xhtml&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;head&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;title&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Gravatar demo&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;title&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;script type&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;text/javascript&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; src&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;jquery-1.3.2-vsdoc.js&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;script&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;script type&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;text/javascript&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; src&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;jquery.md5.js&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;script&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;script type&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;text/javascript&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;function&lt;/span&gt;&lt;span style="color:#000000;"&gt; unescapeEmailAddress(email) {
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; email
               .replace(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; RegExp(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; !dot! &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;g&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;), &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;.&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
               .replace(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; RegExp(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; !at! &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;g&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;), &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;@&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
               .replace(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;mailto:&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
        }
        
        
        $(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;function&lt;/span&gt;&lt;span style="color:#000000;"&gt;() {
            $(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;a[href^=\&amp;quot;mailto\&amp;quot;]&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;).each(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;function&lt;/span&gt;&lt;span style="color:#000000;"&gt;() {
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt; self &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; $(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt; email &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; unescapeEmailAddress(self.attr(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;href&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;));
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt; md5 &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; $.md5(email);
                &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt; gravatar &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;http://www.gravatar.com/avatar/&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; md5 &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;?d=monsterid&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
                self
                   .html(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;img src=\&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; gravatar &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;\&amp;#39; alt=\&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; email &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;\&amp;#39;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
                   .attr(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;href&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;mailto:&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;email)
                ;
            });
        });
    
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;script&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;head&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;body&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;a href&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;mailto:mtb !dot! snowboard !at! gmail !dot! com&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;mtb &lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;dot&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt; snowboard &lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;at&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt; gmail &lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;dot&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt; com&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;a&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;a href&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;mailto:prova !at! prova !dot! com&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;prova &lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;at&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt; prova &lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;dot&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt; com&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;a&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;body&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;/&lt;/span&gt;&lt;span style="color:#000000;"&gt;html&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=5148" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/gravatar/default.aspx">gravatar</category></item><item><title>Pimp my code</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/02/24/pimp-my-code.aspx</link><pubDate>Mon, 23 Feb 2009 16:42:00 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:4892</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=4892</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2009/02/24/pimp-my-code.aspx#comments</comments><description>&lt;p&gt;Sto implementando un sistema di localizzazione da usare su Asp.Net MVC su tutti i layer (db, business logic, presentation). Ho quindi implementato un sistema di dizionari in formato Json (per poterli riutilizzare poi con JQuery lato client all&amp;#39;occorrenza). &lt;/p&gt; &lt;p&gt;Prima di validare il prototipo da includere nel trunk ho creato un test per verificare il corretto funzionamento del mio servizio di localizzazione.&lt;/p&gt; &lt;p&gt;Visto che non sono &amp;quot;troppo&amp;quot; orientato ai test chiedo aiuto per migliorare il codice sottostante...&lt;/p&gt; &lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:287px;"&gt; &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   1:&lt;/span&gt; [Test]&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   2:&lt;/span&gt; &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; CanLocalizeUsingDefaultLocaleFallback()&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   4:&lt;/span&gt;     &lt;span&gt;string&lt;/span&gt; jsondicIT = &lt;span&gt;&amp;quot;{\&amp;quot;Core.Info\&amp;quot;:\&amp;quot;Informazione\&amp;quot;,\&amp;quot;Core.Warning\&amp;quot;:\&amp;quot;Attenzione\&amp;quot;,\&amp;quot;Core.Error\&amp;quot;:\&amp;quot;Errore\&amp;quot;}&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   5:&lt;/span&gt;     &lt;span&gt;string&lt;/span&gt; jsondicEN = &lt;span&gt;&amp;quot;{\&amp;quot;Core.Info\&amp;quot;:\&amp;quot;Info\&amp;quot;,\&amp;quot;Core.Warning\&amp;quot;:\&amp;quot;Warning\&amp;quot;,\&amp;quot;Core.Error\&amp;quot;:\&amp;quot;Error\&amp;quot;, \&amp;quot;Core.EN\&amp;quot;:\&amp;quot;Only en\&amp;quot;}&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   6:&lt;/span&gt;     StreamReader readerIT = &lt;span&gt;new&lt;/span&gt; StreamReader(&lt;span&gt;new&lt;/span&gt; MemoryStream(Encoding.UTF8.GetBytes(jsondicIT)));&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   7:&lt;/span&gt;     StreamReader readerEN = &lt;span&gt;new&lt;/span&gt; StreamReader(&lt;span&gt;new&lt;/span&gt; MemoryStream(Encoding.UTF8.GetBytes(jsondicEN)));&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   8:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   9:&lt;/span&gt;     MockRepository mocks = &lt;span&gt;new&lt;/span&gt; MockRepository();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  10:&lt;/span&gt;     IResourceLoader loader = mocks.DynamicMock&amp;lt;IResourceLoader&amp;gt;();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  11:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  12:&lt;/span&gt;     SetupResult.For(loader.EnumLocales()).Return(&lt;span&gt;new&lt;/span&gt;[] {&lt;span&gt;&amp;quot;it-IT&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;});&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  13:&lt;/span&gt;     SetupResult.For(loader.EnumResources(&lt;span&gt;&amp;quot;it-IT&amp;quot;&lt;/span&gt;)).Return(&lt;span&gt;new&lt;/span&gt;[] {&lt;span&gt;&amp;quot;it-IT\\Core.dic&amp;quot;&lt;/span&gt;});&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  14:&lt;/span&gt;     SetupResult.For(loader.EnumResources(&lt;span&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;)).Return(&lt;span&gt;new&lt;/span&gt;[] { &lt;span&gt;&amp;quot;en-US\\Core.dic&amp;quot;&lt;/span&gt; });&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  15:&lt;/span&gt;     SetupResult.For(loader.Load(&lt;span&gt;&amp;quot;it-IT\\Core.dic&amp;quot;&lt;/span&gt;)).Return(readerIT);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  16:&lt;/span&gt;     SetupResult.For(loader.Load(&lt;span&gt;&amp;quot;en-US\\Core.dic&amp;quot;&lt;/span&gt;)).Return(readerEN);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  17:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  18:&lt;/span&gt;     ILocalizationService localizationService = &lt;span&gt;new&lt;/span&gt; LocalizationService(&lt;span&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  19:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  20:&lt;/span&gt;     mocks.ReplayAll();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  21:&lt;/span&gt;     localizationService.AddLocales(loader);&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  22:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  23:&lt;/span&gt;     &lt;span&gt;// requested locale dictionary&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  24:&lt;/span&gt;     Assert.That(localizationService.Localize(&lt;span&gt;&amp;quot;it-IT&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;Core.Info&amp;quot;&lt;/span&gt;), Is.EqualTo(&lt;span&gt;&amp;quot;Informazione&amp;quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  25:&lt;/span&gt;     &lt;span&gt;// default locale dictionary fallback&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  26:&lt;/span&gt;     Assert.That(localizationService.Localize(&lt;span&gt;&amp;quot;it-IT&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;Core.EN&amp;quot;&lt;/span&gt;), Is.EqualTo(&lt;span&gt;&amp;quot;Only en&amp;quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  27:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  28:&lt;/span&gt;     mocks.VerifyAll();&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  29:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=4892" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Ecosystem15/default.aspx">Ecosystem15</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/c_2300_/default.aspx">c#</category></item><item><title>Async data con jQuery, Flexigrid e Asp.Net MVC</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/11/26/async-data-con-jquery-flexigrid-e-asp-net-mvc.aspx</link><pubDate>Tue, 25 Nov 2008 17:54:22 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:4547</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=4547</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/11/26/async-data-con-jquery-flexigrid-e-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;Dopo aver introdotto &lt;a href="http://dotnetmarche.org/blogs/andreabalducci/archive/2008/11/22/jquery-flexigrid-fluent-interface.aspx" target="_blank"&gt;jQuery e Flexigrid&lt;/a&gt; nel nostro progetto Asp.Net MVC implementiamo una fonte dati asincrona per la nostra griglia.&lt;/p&gt; &lt;p&gt;Prima di tutto definiamo dei dati di esempio su cui lavorare estendendo la classe SampleData aggiungendo un metodo per ottenere un set di dati su cui lavorare.&lt;/p&gt; &lt;p&gt;Aggiungiamo la proprietà LotOfContacts che genera un set di dati e li memorizza in un datamember statico per mantenere costante il set di dati tra le richieste.&lt;/p&gt; &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; SampleData&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IQueryable&amp;lt;ContactModel&amp;gt; _cache = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IQueryable&amp;lt;ContactModel&amp;gt; LotOfContacts&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         get&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _cache ?? (_cache = GenerateRandomContacts(100));&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IQueryable&amp;lt;ContactModel&amp;gt; GenerateRandomContacts(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; amount)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;         ...&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;La generazione pseudo-random dei dati avviene con il seguente algorimo&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:221px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IQueryable&amp;lt;ContactModel&amp;gt; GenerateRandomContacts(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; amount)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] names = { &lt;span style="color:#006080;"&gt;&amp;quot;Andrea&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Stefano&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Roberto&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Alessandro&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Gian Maria&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Diego&amp;quot;&lt;/span&gt; };&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] surnames = { &lt;span style="color:#006080;"&gt;&amp;quot;Rossi&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Verdi&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Bianchi&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Conti&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Russo&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Ferrari&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Esposito&amp;quot;&lt;/span&gt; };&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] addresses = { &lt;span style="color:#006080;"&gt;&amp;quot;Via Garibaldi&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Via Verdi&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Via Bianchi&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Piazza Libertà&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Largo stretto&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Corso Magenta&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Via Litoranea&amp;quot;&lt;/span&gt; };&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] phones = { &lt;span style="color:#006080;"&gt;&amp;quot;555-1111&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;555-2222&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;555-3333&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;555-4444&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;555-5555&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;555-6666&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;555-7777&amp;quot;&lt;/span&gt; };&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     Random r = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Random(amount);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     IList&amp;lt;ContactModel&amp;gt; list = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;ContactModel&amp;gt;();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; c = 1; c &amp;lt;= amount; c++)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         list.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ContactModel(c.ToString())&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;                      {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;                          Name =&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;                              &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;{0} {1}&amp;quot;&lt;/span&gt;, names[r.Next(names.Length)],&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;                                            surnames[r.Next(surnames.Length)]),&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;                          Address = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;{0} {1}&amp;quot;&lt;/span&gt;, addresses[r.Next(addresses.Length)], c),&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;                          Phone = phones[r.Next(phones.Length)]&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;                      }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;            );&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; list.AsQueryable();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;La scelta di ritornare un IQueryable&amp;lt;T&amp;gt; è dettata dalla necessità di poter interrogare tramite Linq la nostra &amp;quot;base dati&amp;quot;. La&amp;nbsp; classe ContactModel è stata modificata con l&amp;#39;aggiunta di un ID utile per identificare il record nella selezione in griglia.&lt;/p&gt;
&lt;p&gt;Modifichiamo ora Tutorial3.aspx per indicare la fonte dati e configurare la griglia&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:224px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &amp;lt;script type=&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     $(&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &amp;lt;%= Html.NewFlexiGrid(&lt;span style="color:#006080;"&gt;&amp;quot;Contacts&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         .AddColumn(&lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, 200, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, FlexiGridBuilder.Align.left)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         .AddColumn(&lt;span style="color:#006080;"&gt;&amp;quot;Address&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Address&amp;quot;&lt;/span&gt;, 180, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, FlexiGridBuilder.Align.left)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         .AddColumn(&lt;span style="color:#006080;"&gt;&amp;quot;Phone&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Phone&amp;quot;&lt;/span&gt;, 120, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, FlexiGridBuilder.Align.left)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         .AddSearchItem(&lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         .AddSearchItem(&lt;span style="color:#006080;"&gt;&amp;quot;Address&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Address&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         .AddSearchItem(&lt;span style="color:#006080;"&gt;&amp;quot;Phone&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Phone&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         .SetDataUrl(Url.Action(&lt;span style="color:#006080;"&gt;&amp;quot;ListContacts&amp;quot;&lt;/span&gt;))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         .SetRecordsPerPage(10)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         .SetHeight(300)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;         .SetWidth(600)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;         .Create(&lt;span style="color:#006080;"&gt;&amp;quot;tablefx&amp;quot;&lt;/span&gt;)%&amp;gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     });&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; &amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Flexigrid verrà quindi creata vuota lato client; una chiamata asincrona chiederà al server i dati in formato Json utilizzando l&amp;#39;url passato come fonte dati con &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .SetDataUrl(Url.Action(&amp;quot;ListContacts&amp;quot;)).&lt;/p&gt;
&lt;p&gt;Questo si traduce nella chiamata alla nuova action (creata ad hoc) ListContacts del nostro controller.&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:69px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ActionResult ListContacts(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; page, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; rp, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sortname, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sortorder, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; query, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; qtype)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Flexigrid chiamerà la nostra action indicando:&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2"&gt;

&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parametro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Descrizione&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;page&lt;/td&gt;
&lt;td&gt;Pagina corrente&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rp&lt;/td&gt;
&lt;td&gt;Record per pagina&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sortname&lt;/td&gt;
&lt;td&gt;Colonna usata per l&amp;#39;ordinamento&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sortorder&lt;/td&gt;
&lt;td&gt;Ordinamento ASC o DESC&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;query&lt;/td&gt;
&lt;td&gt;Testo da ricercare&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;qtype&lt;/td&gt;
&lt;td&gt;Colonna su cui eseguire la ricerca&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;A questo punto abbiamo tutti i parametri necessari per implementare la nostra logica di interrogazione dati. Per inviare i dati al client creiamo due classi di supporto che useremo come DTO per popolare la nostra Flexigrid.&lt;/p&gt;
&lt;p&gt;Definiamo prima di tutto il DTO per le righe &lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:151px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; FlexiGridTutorial.Models&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; FlexiGridDataRow&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; id;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] cell;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;ed uno per la visualizzazione corrente&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:203px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; FlexiGridTutorial.Models&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; FlexiGridData&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; page;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;long&lt;/span&gt; total;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; IList&amp;lt;FlexiGridDataRow&amp;gt; rows;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Anche in questo caso la scelta dei nomi dei datamember rispecchia quanto richiesto da Flexigrid in termini di notazione Json.&lt;br /&gt;Il vantaggio di questo approccio è la semplicità del codice necessario a generare la nostra risposta Json:&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:134px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ActionResult ListContacts(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; page, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; rp, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sortname, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sortorder, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; query, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; qtype)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     var data = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FlexiGridData();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     data.rows = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;FlexiGridDataRow&amp;gt;();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     ...&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; Json(data);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Finita l&amp;#39;infrastruttura&amp;nbsp; implementiamo la logica di interrogazione utilizzando Linq a partire dalla nostra base dati.&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:47px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// source data&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; IQueryable&amp;lt;ContactModel&amp;gt; db = SampleData.LotOfContacts;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Per prima cosa eseguiamo l&amp;#39;eventuale ricerca impostata dall&amp;#39;utente&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:177px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// filter&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(query))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt; (qtype)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;: db = from l &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; db &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; l.Name.ToLowerInvariant().Contains(query) select l; &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Address&amp;quot;&lt;/span&gt;: db = from l &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; db &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; l.Address.ToLowerInvariant().Contains(query) select l; &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Phone&amp;quot;&lt;/span&gt;: db = from l &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; db &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; l.Phone.ToLowerInvariant().Contains(query) select l; &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;memorizziamo quindi le informazioni per la paginazione (pagina corrente e numero totale di record)&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:65px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// pagination data&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; data.page = page;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; data.total = db.Count();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;ed applichiamo il criterio di ordinamento:&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:160px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// order&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; desc = String.Compare(&lt;span style="color:#006080;"&gt;&amp;quot;desc&amp;quot;&lt;/span&gt;, sortorder, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;) == 0;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt; (sortname)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;: db = desc ? db.OrderByDescending(x =&amp;gt; x.Name) : db.OrderBy(x =&amp;gt; x.Name); &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Address&amp;quot;&lt;/span&gt;: db = desc ? db.OrderByDescending(x =&amp;gt; x.Address) : db.OrderBy(x =&amp;gt; x.Address); &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Phone&amp;quot;&lt;/span&gt;: db = desc ? db.OrderByDescending(x =&amp;gt; x.Phone) : db.OrderBy(x =&amp;gt; x.Phone); &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Ora che la nostra query è pronta applichiamo la paginazione per limitare il numero di record da inviare al client:&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:51px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;height:18px;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// pagination&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; db = db.Skip((page - 1) * rp).Take(rp);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Non resta che creare i DTO da inviare al client&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:300px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:272px;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// result...&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var contact &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; db)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     var row = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FlexiGridDataRow&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;                   {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;                       id = contact.ID,&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;                       cell = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;[]&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                                  {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                                      contact.Name,&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                                      contact.Address,&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                                      contact.Phone&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                                  }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;                   };&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     data.rows.Add(row);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;ed inviare la risposta&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// response&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; Json(data);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Ed ecco la nostra griglia pronta all&amp;#39;uso...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetmarche.org/blogs/andreabalducci/WindowsLiveWriter/AsyncdataconjQueryFlexigrideAsp.NetMVC_10D5/image_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="461" alt="image" src="http://dotnetmarche.org/blogs/andreabalducci/WindowsLiveWriter/AsyncdataconjQueryFlexigrideAsp.NetMVC_10D5/image_thumb.png" width="529" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download code: &lt;a href="http://dotnetmarche.org/blogs/andreabalducci/Code/FlexiGridTutorial03.zip" target="_blank"&gt;FlexiGridTutorial03.zip (183kb)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=4547" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/DotNetMarche/default.aspx">DotNetMarche</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/chrome/default.aspx">chrome</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/c_2300_/default.aspx">c#</category></item><item><title>Estrazione delle embedded resources su file system</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/10/08/estrazione-delle-embedded-resources-su-disco.aspx</link><pubDate>Wed, 08 Oct 2008 07:37:07 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:4214</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=4214</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/10/08/estrazione-delle-embedded-resources-su-disco.aspx#comments</comments><description>&lt;p&gt;Per la realizzazione di un progetto ho incluso come embedded resources diversi file (report, immagini, xml, etc...) in modo da semplificare il deploy. Per lasciare comunque la possibilità di customizzare l&amp;#39;installazione ho creato questa classe helper che permette di fare il dump della risorsa embedded su file system. Il codice che accede alla risorsa chiama sempre la EnsureFileSystemCopy poi accede tramite file system. In questo modo chi installa / assiste ha libertà di azione.&lt;/p&gt; &lt;p&gt;In caso di &amp;quot;disastro&amp;quot; basta svuotare la cartella di dump delle risorse per tornare alla situazione originale.&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:C411E4BC-FA5A-4068-9F25-1AA2B5A98D76:094fa2ce-a69a-4d5f-aaf0-f8d4b25abcc0" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;div style="display:block;margin:2px;background-color:#F7F7FF;border:solid 1px gray;"&gt;&lt;table&gt; 	&lt;tr&gt; 		&lt;td&gt;1.&lt;/td&gt; 		&lt;td&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; System;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;2.&lt;/td&gt; 		&lt;td&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; System.IO;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;3.&lt;/td&gt; 		&lt;td&gt;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; System.Reflection;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;4.&lt;/td&gt; 		&lt;td&gt;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;5.&lt;/td&gt; 		&lt;td&gt;&lt;span style="color:#0000FF;"&gt;namespace&lt;/span&gt; Prxm.Pass.Framework.Helpers&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;6.&lt;/td&gt; 		&lt;td&gt;{&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;7.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;static&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;class&lt;/span&gt; EmbeddedResourcesHelper&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;8.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;9.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;static&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;void&lt;/span&gt; EnsureFileSystemCopy(Assembly assembly, &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; resourceName, &lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; filename)&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;10.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;11.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt; (File.Exists(filename))&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;12.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;13.&lt;/td&gt; 		&lt;td&gt;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;14.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt; folder = Path.GetDirectoryName(filename);&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;15.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt; (!Directory.Exists(folder))&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;16.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Directory.CreateDirectory(folder);&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;17.&lt;/td&gt; 		&lt;td&gt;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;18.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; (var stream = assembly.GetManifestResourceStream(resourceName))&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;19.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;20.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000FF;"&gt;null&lt;/span&gt; == stream)&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;21.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; Exception(&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;.Format(&amp;quot;&lt;span style="color:#8B0000;"&gt;Cannot find resource {0} in assembly {1}&lt;/span&gt;&amp;quot;, resourceName,&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;22.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  assembly.FullName));&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;23.&lt;/td&gt; 		&lt;td&gt;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;24.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; (var reader = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; BinaryReader(stream))&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;25.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;26.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;using&lt;/span&gt; (var writer = &lt;span style="color:#0000FF;"&gt;new&lt;/span&gt; BinaryWriter(File.Create(filename)))&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;27.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;28.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;byte&lt;/span&gt;[] buffer;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;29.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000FF;"&gt;while&lt;/span&gt;((buffer = reader.ReadBytes(1024)).Length &amp;gt; 0)&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;30.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.Write(buffer);&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;31.&lt;/td&gt; 		&lt;td&gt;&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;32.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writer.Flush();&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;33.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;34.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;35.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;36.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;37.&lt;/td&gt; 		&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;38.&lt;/td&gt; 		&lt;td&gt;}&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr&gt; 		&lt;td&gt;39.&lt;/td&gt; 		&lt;td&gt;&lt;/td&gt; 	&lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=4214" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/library/default.aspx">library</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/proximo/default.aspx">proximo</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Mago/default.aspx">Mago</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/mobile/default.aspx">mobile</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/design/default.aspx">design</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/embedded+resources/default.aspx">embedded resources</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/wcf/default.aspx">wcf</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/pass/default.aspx">pass</category></item><item><title>NHibernate Plugin for R#</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/10/05/nhibernate-plugin-for-r.aspx</link><pubDate>Sun, 05 Oct 2008 04:17:25 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:4201</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=4201</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/10/05/nhibernate-plugin-for-r.aspx#comments</comments><description>&lt;p align="justify"&gt;Ho installato l&amp;#39;ottimo &lt;a href="http://code.google.com/p/nhplugin/" target="_blank"&gt;plugin&lt;/a&gt; per Resharper per abilitare l&amp;#39;analisi di codice sui file di mapping. Il progetto compila bene ma l&amp;#39;analizzatore di codice del plugin segnala che Guid (chiave della mia entity) non è di tipo &amp;#39;T&amp;#39;.&lt;/p&gt; &lt;p align="justify"&gt;La mia entity implementa IEntity&amp;lt;T&amp;gt; ed eredita l&amp;#39;id da una EntityBase&amp;lt;T&amp;gt; creata con T =&amp;gt; Guid&lt;/p&gt; &lt;p align="justify"&gt;Grazie al fatto che sono disponibili i sorgenti scarico dal repository e compilo. Avvio il debug il plugin (con stupore noto che lanciare un secondo vs in debug è più veloce che lanciare un altro vs da shell) e trovo la riga incriminata. R# segnala che il mio field _id su cui è mappata la chiave della mia entity è di tipo T piuttosto che risolvere il tipo in Guid. Visto che il resto dell&amp;#39;analisi di codice funziona bene non so se il problema è nel plugin o in R#. Per ora l&amp;#39;ho segnalato qui &lt;a title="http://code.google.com/p/nhplugin/issues/detail?id=19" href="http://code.google.com/p/nhplugin/issues/detail?id=19"&gt;http://code.google.com/p/nhplugin/issues/detail?id=19&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Per bypassare in attesa di una risposta ho &amp;quot;tapullato&amp;quot; modificando in modo brutale il file \Analysis\MappingFile\MappingFileAnalysisElementProcessor.cs alla riga 446 aggiungendo nel controllo del tipo lo skip di T -&amp;gt; fieldType.GetCLRName().CompareTo(&amp;quot;T&amp;quot;) != 0 &lt;/p&gt; &lt;p align="justify"&gt;Ancora una volta non posso far altro che apprezzare il &amp;quot;sorgente aperto&amp;quot;.&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=4201" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/google/default.aspx">google</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/open+source/default.aspx">open source</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/resharper/default.aspx">resharper</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/plugin/default.aspx">plugin</category></item><item><title>Prove tecniche di democrazia o lotta per la sopravvivenza?</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/09/16/prove-tecniche-di-democrazia-o-lotta-per-la-sopravvivenza.aspx</link><pubDate>Tue, 16 Sep 2008 02:01:01 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:4148</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=4148</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/09/16/prove-tecniche-di-democrazia-o-lotta-per-la-sopravvivenza.aspx#comments</comments><description>&lt;p&gt;Finalmente anche Codeplex annuncia il supporto diretto di SVN. Nei giorni scorsi mi sono trovato a dover scegliere un repository per un progetto opensource ed ho valutato sia Codeplex che Google Code. Con grande stupore ho trovato diversi progetti su Codeplex che rimandavano a Google Code per l&amp;#39;accesso ai sorgenti proprio perchè il supporto SVN lasciava a desiderare.&lt;/p&gt; &lt;p&gt;Ora il cambio di rotta, credo più per &amp;quot;tenere botta&amp;quot; che per spirito di democrazia (il supporto svn è stato richiesto subito).&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.msdn.com/codeplex/archive/2008/09/14/codeplex-launches-support-for-tortoisesvn.aspx" href="http://blogs.msdn.com/codeplex/archive/2008/09/14/codeplex-launches-support-for-tortoisesvn.aspx"&gt;http://blogs.msdn.com/codeplex/archive/2008/09/14/codeplex-launches-support-for-tortoisesvn.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=4148" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/microsoft/default.aspx">microsoft</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/google/default.aspx">google</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/scm/default.aspx">scm</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/svn/default.aspx">svn</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/codeplex/default.aspx">codeplex</category></item><item><title>Asp.Net MVC Portal Application Framework: Ecosystem15</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/09/01/asp-net-mvc-portal-application-framework-ecosystem15.aspx</link><pubDate>Mon, 01 Sep 2008 10:00:00 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:4079</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=4079</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/09/01/asp-net-mvc-portal-application-framework-ecosystem15.aspx#comments</comments><description>&lt;p&gt;Ho pubblicato su &lt;a href="http://code.google.com/p/ecosystem15/" title="http://code.google.com/p/ecosystem15/"&gt;http://code.google.com/p/ecosystem15/&lt;/a&gt; l&amp;#39;update dei sorgenti per il framework Asp.Net MVC che sto scrivendo per realizzare applicazioni Asp.Net MVC.&lt;br /&gt;Attualmente è possibile realizzare controller e view in assembly separati e deployarli con il semplice copia e incolla nella cartella &amp;lt;web_root&amp;gt;\bin.&lt;br /&gt;E&amp;#39; presente una semplicissima applicazione di test TaskList che implementa la persistenza con NHibernate e fa uso del motore di IoC di Castle per disaccoppiare il repository dal controller.&lt;/p&gt; &lt;p&gt;Prossimo step: introduzione di JQuery e realizzazione di portlet per avere pagine con componenti dinamiche che sfruttano il paradigma MVC.&lt;/p&gt; &lt;p&gt;Help wanted!&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=4079" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/DotNetMarche/default.aspx">DotNetMarche</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Ecosystem15/default.aspx">Ecosystem15</category></item><item><title>Pubblicato il primo  prototipo di Ecosystem15</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/08/30/pubblicato-il-primo-prototipo-di-ecosystem15.aspx</link><pubDate>Sat, 30 Aug 2008 03:32:34 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:4074</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=4074</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/08/30/pubblicato-il-primo-prototipo-di-ecosystem15.aspx#comments</comments><description>&lt;p&gt;Su &lt;a title="http://code.google.com/p/ecosystem15/" href="http://code.google.com/p/ecosystem15/"&gt;http://code.google.com/p/ecosystem15/&lt;/a&gt; trovate il nuovo progetto Open Source per la gestione di applicazioni MVC. Attualmente è allo stato di prototipo ma permette già di avere intere applicazioni hostate in assembly compilati (comprese view).&lt;/p&gt; &lt;p&gt;Il prossimo step è l&amp;#39;integrazione di un sistema di persistenza a plug-in (il primo sarà NHibernate) e di JQuery.&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=4074" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/DotNetMarche/default.aspx">DotNetMarche</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Ecosystem15/default.aspx">Ecosystem15</category></item><item><title>Come passa il tempo!!</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/07/22/come-passa-il-tempo.aspx</link><pubDate>Mon, 21 Jul 2008 15:56:22 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:3926</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=3926</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/07/22/come-passa-il-tempo.aspx#comments</comments><description>&lt;p&gt;Controllando il mio account su &lt;a href="http://www.codeproject.com/script/Membership/Profiles.aspx?mid=426" target="_blank"&gt;CodeProject&lt;/a&gt; ho (ri)scoperto di essere registrato da più di 8 anni :D (eravamo migrati in massa da &lt;a href="http://www.codeguru.com/" target="_blank"&gt;CodeGuru&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Utente 426 su 5.000.000 e passa (e se non ricordo male questo è il&amp;nbsp; secondo account visto che del&amp;nbsp; primo avevo perso le credenziali.... errori di gioventù).&lt;/p&gt; &lt;p&gt;Un grazie enorme a tutti quelli che collaborano al successo di questa iniziativa, mi avete aiutato a migliorare continuamente.&lt;/p&gt; &lt;p&gt;Prima o poi saldo il debito pubblicando qualche articolo su C#.&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=3926" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/memorabilia/default.aspx">memorabilia</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/personale/default.aspx">personale</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/CodeProject/default.aspx">CodeProject</category></item><item><title>Ricomincio da 3...</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/06/15/ricomincio-da-3.aspx</link><pubDate>Sat, 14 Jun 2008 19:15:54 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:3759</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=3759</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/06/15/ricomincio-da-3.aspx#comments</comments><description>&lt;p align="justify"&gt;Stavo testando la beta 3 di ASP.Net MVC con Spring Framework e NHibernate. Alla prima richiesta processata da IIS è uscito un errore generico (&amp;quot;Server Application Unavailable&amp;quot;) che rimanda all&amp;#39;event viewer.&lt;/p&gt; &lt;p align="justify"&gt;L&amp;#39;event viewer mostra:&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="justify"&gt;Event Type:&amp;nbsp;&amp;nbsp;&amp;nbsp; Error&lt;br /&gt;Event Source:&amp;nbsp;&amp;nbsp;&amp;nbsp; ASP.NET 2.0.50727.0&lt;br /&gt;Event ID:&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&lt;br /&gt;Description:&lt;br /&gt;aspnet_wp.exe&amp;nbsp; (PID: 1328) stopped unexpectedly. &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Event Type:&amp;nbsp;&amp;nbsp;&amp;nbsp; Error&lt;br /&gt;Event Source:&amp;nbsp;&amp;nbsp;&amp;nbsp; ASP.NET 2.0.50727.0&lt;br /&gt;Event ID:&amp;nbsp;&amp;nbsp;&amp;nbsp; 1089&lt;br /&gt;Description:&lt;br /&gt;Failed to execute the request because the ASP.NET process identity does not have read permissions to the global assembly cache. Error: 0x80070005 Access is denied.&amp;nbsp; &lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Event Type:&amp;nbsp;&amp;nbsp;&amp;nbsp; Error&lt;br /&gt;Event Source:&amp;nbsp;&amp;nbsp;&amp;nbsp; ASP.NET 2.0.50727.0&lt;br /&gt;Event ID:&amp;nbsp;&amp;nbsp;&amp;nbsp; 1334&lt;br /&gt;Description:&lt;br /&gt;&lt;font color="#ff0000"&gt;Failed to initialize the AppDomain:/LM/W3SVC/1/Root/nw &lt;br /&gt;&lt;/font&gt;Exception: System.IO.FileLoadException &lt;br /&gt;Message: Could not load file or assembly &amp;#39;System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;#39; or one of its dependencies. Access is denied. &lt;br /&gt;StackTrace:&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark&amp;amp; stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark&amp;amp; stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark&amp;amp; stackMark, Boolean forIntrospection)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark&amp;amp; stackMark, Boolean forIntrospection)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark&amp;amp; stackMark)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Activator.CreateInstance(String assemblyName, String typeName)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.AppDomain.CreateInstance(String assemblyName, String typeName)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.AppDomain.CreateInstance(String assemblyName, String typeName)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters) &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="justify"&gt;Provo con l&amp;#39;ASP.Net Development Server direttamente da VS 2008 e funziona tutto ok....&lt;/p&gt; &lt;p align="justify"&gt;Scatta la ricerca su google, escono tonellate di pagine che spiegano come cambiare i permessi alla GAC, reinstallare VS e IIS nell&amp;#39;ordine corretto e via di seguito (ho letto veramente di tutto!!!).&lt;/p&gt; &lt;p align="justify"&gt;Tra le decine di soluzioni &amp;quot;strambe&amp;quot; (e lunghissime) appare un commento semplice semplice che recita &amp;quot;You need to give the account ASPNET read access to the web site&amp;#39;s application directory.&amp;quot;&lt;/p&gt; &lt;p align="justify"&gt;Tana: scoppattando lo zip con i sorgenti non ho l&amp;#39;ACL con i permessi corretti. Aggiunto ASP.Net tra gli utenti abilitati e anche la virtual folder su IIS va.&lt;br /&gt;&lt;/p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p align="justify"&gt;&lt;strong&gt;Morale&lt;br /&gt;&lt;/strong&gt;Quando si cerca di identificare un problema &lt;u&gt;bisogna sempre risalire al primo&lt;/u&gt; errore, tutti gli altri scaturiti in cascata sono solo fuorvianti. La maggior parte dei post che&amp;nbsp; ho trovato focalizzavano l&amp;#39;attenzione sul permettere all&amp;#39;utente ASP.Net di accedere alla GAC, dando per scontato l&amp;#39;esistenza dell&amp;#39;application domain. Nel mio caso l&amp;#39;assenza dei permessi sulla root del progetto web impediva la creazione di un application domain, quindi non esistevano credenziali valide per accedere alla GAC.&lt;/p&gt; &lt;p align="justify"&gt;Usando &amp;quot;Asp.Net Development Server&amp;quot; tutto gira con le credenziali dell&amp;#39;utente corrente quindi tutto fila liscio...&lt;/p&gt; &lt;p align="justify"&gt;Spero possa esservi di aiuto.&lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=3759" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/DotNetMarche/default.aspx">DotNetMarche</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category></item><item><title>Grazie Fiddler ;D</title><link>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/03/03/grazie-fiddler-d.aspx</link><pubDate>Sun, 02 Mar 2008 15:27:54 GMT</pubDate><guid isPermaLink="false">61321887-5500-4417-8b9e-633d632ef265:3510</guid><dc:creator>andrea.balducci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetmarche.org/blogs/andreabalducci/rsscomments.aspx?PostID=3510</wfw:commentRss><comments>http://dotnetmarche.org/blogs/andreabalducci/archive/2008/03/03/grazie-fiddler-d.aspx#comments</comments><description>&lt;p&gt;Da qualche tempo gioco con &lt;a href="http://www.fiddlertool.com/" target="_blank"&gt;Fiddler&lt;/a&gt; per alleggerire le applicazioni web. Guardando i log di connessione risultava il download della Default.aspx durante la visualizzazione di altre pagine! &lt;/p&gt; &lt;p&gt;Cerca, cerca, cerca e..... (finalmente) problema trovato: una immagine dinamica di un panel che di default è nascosto che non ha un url di default. L&amp;#39;immagine viene visualizzata tramite chiamata dell&amp;#39;updatepanel che avviene dopo aver impostato la bitmap corretta.&lt;/p&gt; &lt;p&gt;Tutto questo nella masterpage principale.... &lt;/p&gt; &lt;p&gt;Controllando l&amp;#39;html, l&amp;#39;immagine veniva comunque renderizzata, anche se il panel non era visibile (a causa di un popupextender) con src=&amp;quot;&amp;quot;, il che significa che il browser esegue comunque la chiamata lato server che viene rimappata alla default.aspx.&lt;/p&gt; &lt;p&gt;Soluzione: impostare il Visible=&amp;quot;false&amp;quot; ed EnableViewState=&amp;quot;false&amp;quot; nel markup e cambiarne lo stato dopo aver impostato la bitmap da codice. In questo modo l&amp;#39;html relativo non viene generato fino a che non viene effettivamente impostata un&amp;#39;immagine valida.&lt;/p&gt; &lt;p&gt;Risultato: dimezzato il traffico per pagina ed il carico lato server. Grazie Fiddler ;D &lt;/p&gt;&lt;img src="http://dotnetmarche.org/aggbug.aspx?PostID=3510" width="1" height="1"&gt;</description><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/ui/default.aspx">ui</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://dotnetmarche.org/blogs/andreabalducci/archive/tags/code/default.aspx">code</category></item></channel></rss>