<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>ASP.NET</title>
        <link>http://blogs.ugidotnet.org:443/ainotame/category/ASP.NET.aspx</link>
        <description>ASP.NET</description>
        <language>it</language>
        <copyright>Roberto Sarati</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Upgrade progetto MVC4 a MVC5 in VS2012</title>
            <link>http://blogs.ugidotnet.org:443/ainotame/archive/2013/11/20/upgrade-progetto-mvc4-a-mvc5-in-vs2012.aspx</link>
            <description>&lt;p&gt;Se avete un progetto ASP.NET MVC4 in VS2012 e, ingenuamente, credete che basti aggiornare i pacchetti nuget per passare alla nuova versione di MVC5 beh, siete leggermente fuori strada.&lt;/p&gt;  &lt;p&gt;In primis occorre modificare opportunamente i web.config e il file csproj come spiegato in questo articolo:   &lt;br /&gt;&lt;a href="http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2"&gt;http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Dopo tali modifiche tuttavia vi renderete conto di non aver più intellisense nelle pagine razor.   &lt;br /&gt;Per riaverlo è necessario installare ASP.NET and Web Tools 2013.1 for Visual Studio 2012:    &lt;br /&gt; &lt;a href="http://blogs.msdn.com/b/webdev/archive/2013/11/18/announcing-release-of-asp-net-and-web-tools-2013-1-for-visual-studio-2012.aspx"&gt;http://blogs.msdn.com/b/webdev/archive/2013/11/18/announcing-release-of-asp-net-and-web-tools-2013-1-for-visual-studio-2012.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Oppure rimane valido il passaggio a VS2013 :)&lt;/p&gt;  &lt;p&gt;Buon ASP.NET MVC5 a tutti.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org:443/ainotame/aggbug/101727.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Roberto Sarati</dc:creator>
            <guid>http://blogs.ugidotnet.org:443/ainotame/archive/2013/11/20/upgrade-progetto-mvc4-a-mvc5-in-vs2012.aspx</guid>
            <pubDate>Wed, 20 Nov 2013 22:42:24 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org:443/ainotame/archive/2013/11/20/upgrade-progetto-mvc4-a-mvc5-in-vs2012.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org:443/ainotame/comments/commentRss/101727.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org:443/ainotame/services/trackbacks/101727.aspx</trackback:ping>
        </item>
        <item>
            <title>Remove Magic strings with T4MVC [2]</title>
            <link>http://blogs.ugidotnet.org:443/ainotame/archive/2012/07/11/remove-magic-strings-with-t4mvc-2.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;Il mio &lt;a href="http://blogs.ugidotnet.org/ainotame/archive/2012/07/08/remove-magic-strings-with-t4mvc.aspx"&gt;precedente post&lt;/a&gt; mostrava come, tramite l'utilizzo di T4 e del package nuget T4MVC, fosse possibile eliminare senza problemi di performance (nessuna valutazione di expression tree o altro) le stringhe utilizzate per definire link a viste, route, link a file statici ecc ecc...&lt;br /&gt;
Come avevo accennato, il problema del refactoring dei metodi è "quasi" risolto. Spiego il "quasi":&lt;br /&gt;
Il problema principale è che i file cshtml non vengono compilati. Non essendo compilati, non è possibile valutare la presenza di possibili errori. E poichè il refactoring non funziona in questi file, la compilazione non produce errori.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Per caso mi sono imbattuto in un post (non ricordo, sorry) che spiegava come forzare la compilazione dei file cshtml: Editare csproj e impostare &lt;/font&gt;&lt;font face="Arial"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;MvcBuildViews&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;true&lt;font face="Arial"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;MvcBuildViews&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;. In questo modo, ad ogni build, le viste vengono compilate mostrandone i problemi nella Error List View.&lt;br /&gt;
Tutto perfetto se non fosse che abilitare la compilazione delle viste comporti tempi di compilazione (decisamente) più lunghi.&lt;/font&gt;
&lt;/p&gt;&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Il compromesso tra impostare MvcBuildView e avere tempi di compilazione decenti è spiegato qui: &lt;a href="http://www.luisrocha.net/2011/10/avoiding-mvcbuildviews-build-time.html"&gt;http://www.luisrocha.net/2011/10/avoiding-mvcbuildviews-build-time.html&lt;/a&gt;&lt;br /&gt;
In pratica è possibile, tramite External Tools, effettuare una compilazione delle views solo su richiesta dello sviluppatore.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Bye bye magic strings.&lt;/p&gt;
&lt;img src="http://blogs.ugidotnet.org:443/ainotame/aggbug/101103.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Roberto Sarati</dc:creator>
            <guid>http://blogs.ugidotnet.org:443/ainotame/archive/2012/07/11/remove-magic-strings-with-t4mvc-2.aspx</guid>
            <pubDate>Wed, 11 Jul 2012 00:02:25 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org:443/ainotame/archive/2012/07/11/remove-magic-strings-with-t4mvc-2.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org:443/ainotame/comments/commentRss/101103.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org:443/ainotame/services/trackbacks/101103.aspx</trackback:ping>
        </item>
        <item>
            <title>Remove Magic strings with T4MVC</title>
            <link>http://blogs.ugidotnet.org:443/ainotame/archive/2012/07/08/remove-magic-strings-with-t4mvc.aspx</link>
            <description>&lt;a href="http://t4mvc.codeplex.com/"&gt;T4MVC &lt;/a&gt;è un progetto opensource sviluppato da &lt;a href="https://twitter.com/davidebbo"&gt;@davidebbo &lt;/a&gt;ospitato su codeplex, precedentemente parte di &lt;a href="http://mvccontrib.codeplex.com/"&gt;MvcContrib&lt;/a&gt;, ora standalone.&lt;br /&gt;
Cosa pemette di fare? rimuovere, grazie ad un template T4, l'uso delle "stringhe" da un progetto MVC (riferimenti a controller, action, le area, i file statici ...), il tutto con una curva di apprendimento minima (anzi, direi che non vi è curva di apprendimento e che i vari extension method di HtmlHelper sono più "complicati" da scrivere e da leggere).&lt;br /&gt;
&lt;br /&gt;
Alcuni esempi di utilizzo:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;
    &lt;pre style="font-family: Consolas; color: black; background: none repeat scroll 0% 0% white;"&gt;&lt;span style="color: blue; text-decoration: line-through;"&gt;return&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt; RedirectToAction(&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); text-decoration: line-through;"&gt;"Index"&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt;);&lt;/span&gt; &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MVC&lt;/span&gt;.People.Index();&lt;/pre&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;pre style="font-family: Consolas; color: black; background: none repeat scroll 0% 0% white;"&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; text-decoration: line-through;"&gt;@&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt;Html.ActionLink(&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); text-decoration: line-through;"&gt;"Edit"&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); text-decoration: line-through;"&gt;"Edit"&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt;, &lt;/span&gt;&lt;span style="color: blue; text-decoration: line-through;"&gt;new&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt; { id=Model.Id })&lt;/span&gt; &lt;span style="background:yellow;"&gt;@&lt;/span&gt;Html.ActionLink(&lt;span style="color:#a31515;"&gt;"Edit"&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;MVC&lt;/span&gt;.People.Edit(Model.Id)) &lt;br /&gt;&lt;/pre&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;pre style="font-family: Consolas; color: black; background: none repeat scroll 0% 0% white;"&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; text-decoration: line-through;"&gt;@&lt;/span&gt;&lt;span style="color: blue; text-decoration: line-through;"&gt;using&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt; (Html.BeginForm(&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); text-decoration: line-through;"&gt;"Create"&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt;, &lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); text-decoration: line-through;"&gt;"People"&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt;))&lt;/span&gt; &lt;span style="background:yellow;"&gt;@&lt;/span&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; (Html.BeginForm(&lt;span style="color:#2b91af;"&gt;MVC&lt;/span&gt;.People.Create()))&lt;/pre&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;pre style="font-family: Consolas; color: black; background: none repeat scroll 0% 0% white;"&gt;&lt;span style="color: red; text-decoration: line-through;"&gt;href&lt;/span&gt;&lt;span style="color: blue; text-decoration: line-through;"&gt;="&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; text-decoration: line-through;"&gt;@&lt;/span&gt;&lt;span style="color: blue; text-decoration: line-through;"&gt;Url.Content(&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); text-decoration: line-through;"&gt;"~/Content/Site.css"&lt;/span&gt;&lt;span style="color: blue; text-decoration: line-through;"&gt;)"&lt;/span&gt;&lt;span style="color:red;"&gt; href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="background:yellow;"&gt;@&lt;/span&gt;&lt;span style="color:blue;"&gt;Links&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;Site_css&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt; &lt;br /&gt;&lt;/pre&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;pre style="font-family:Consolas;font-size:13;color:black;background:white;"&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; text-decoration: line-through;"&gt;@&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt;Html.Partial(&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); text-decoration: line-through;"&gt;"_LogOnPartial"&lt;/span&gt;&lt;span style="text-decoration: line-through;"&gt;)&lt;/span&gt; &lt;span style="background:yellow;"&gt;@&lt;/span&gt;Html.Partial(&lt;span style="color:#2b91af;"&gt;MVC&lt;/span&gt;.Shared.Views._LogOnPartial) &lt;/pre&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
In package nuget contiene due template T4:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;T4MVC.tt: il template che si occupa di generare classi e metodi da utilizzare degli esempi sopra elencati. In particolare si occupa di creare
    &lt;ul&gt;
        &lt;li&gt;classi T4MVC_*Name*Controller che ereditano *Name*Controller ed ne effettuano l'ovverride dei metodi. In questo modo il refactoring dei metodi è immediato (ovviamente una build è necessaria)&lt;/li&gt;
        &lt;li&gt;Classi partial *Name*Controller che aggiungono alcune shortcuts direttamente ai nostri controller.&lt;/li&gt;
        &lt;li&gt;Una classe statica MVC che raccoglie istanze statiche di classi T4MVC_*Name*Controller&lt;/li&gt;
        &lt;li&gt;Classi statiche Scripts e Contents che raccolgono i link alle varie risorse statiche&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;T4MVC.tt.settings.t4: raccoglie le convenzioni utilizzate dal precedente template, tra le quali:
    &lt;ul&gt;
        &lt;li&gt;string HelpersPrefix="MVC": l'entry point per lo sviluppatore&lt;/li&gt;
        &lt;li&gt;string ControllersFolder e ViewsRootFolder: i nomi delle cartelle dove risiedono i controller e le view&lt;/li&gt;
        &lt;li&gt;string[] StaticFilesFolders: una lista di cartelle contenenti file statici dai quali T4MVC.tt genererà i riferimenti&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;T4MVC permette quindi di eliminare le stringhe, facilitare la scrittura e lettura di codice e rifattorizzare lo stesso (anche se alcuni problemi persistono, soprattutto nei cshtml). Buon coding.&lt;br /&gt;
&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org:443/ainotame/aggbug/101096.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Roberto Sarati</dc:creator>
            <guid>http://blogs.ugidotnet.org:443/ainotame/archive/2012/07/08/remove-magic-strings-with-t4mvc.aspx</guid>
            <pubDate>Sun, 08 Jul 2012 20:57:58 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org:443/ainotame/archive/2012/07/08/remove-magic-strings-with-t4mvc.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org:443/ainotame/comments/commentRss/101096.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org:443/ainotame/services/trackbacks/101096.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET MVC4 [RC] - Bundles</title>
            <link>http://blogs.ugidotnet.org:443/ainotame/archive/2012/06/07/asp.net-mvc4-rc-bundles.aspx</link>
            <description>&lt;p&gt;Dalla beta di asp.net mvc4 sono stati fatti passi avanti nelle API riguardanti i Bundle.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Giusto per informazione, i bundle sono presenti in ASP.NET MVC4 (assembly System.Web.Optimization.dll) e servono per riunire e minificare gruppi di risorse css e js. Questo permette di ridurre il payload e ridurre le connessioni HTTP.&lt;br /&gt;
Ci sono molte librerie che svolgono lo stesso compito (es &lt;a href="http://combres.codeplex.com/"&gt;Combres&lt;/a&gt;, &lt;a href="http://getcassette.net/"&gt;Cassette&lt;/a&gt; ...), ma per i pigri (e chi non vuole troppe dipendenze al di fuori dallo stack ms) ora è tutto integrato.&lt;/p&gt;
&lt;p&gt;Alcune novità rispetto alla beta:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Rimozione del metodo "&lt;/strong&gt;&lt;font face="Arial"&gt;&lt;strong&gt;BundleTable.Bundles.RegisterTemplateBundles()"&lt;/strong&gt;&lt;br /&gt;
    Imho bene, tutto a favore di una registrazione manuale.dei bundle. Il template di asp.net mvc4 di default registra i js e css aggiunti automaticamente nel progetto.&lt;br /&gt;
    E' così possibile da un lato capire come vengono registrate le risorse dall'altro si possono aggiungere le proprie senza troppi problemi.&lt;br /&gt;
    Rimane disponibile (giustamente) il metodo "BundleTable.Bundles.EnableDefaultBundles()" che raggruppa js e css in base alla struttura a folder della progetto.&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Dichiarazione nelle pagine dei bundle tramite @Script.Render(jspaths) e @Styles.Render(csspaths)&lt;/strong&gt;&lt;br /&gt;
    Eccellente. Rispetto a &lt;font face="Arial"&gt;&amp;lt;link href="@System.Web.Optimization.BundleTable.Bundle.ResolveBundleUrl("~/Content/boot/css")" rel="stylesheet" type="text/css" /&amp;gt; è una manna dal cielo. Questo infatti ci permette di avere:&lt;br /&gt;
     - riduzione del codice scritto&lt;br /&gt;
     - possibilità di renderizzare più tag script o link in modo di avere risorse non compresse per debug (ottimo!).&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;(segue) &lt;strong&gt;Il rendering delle risorse è stabilito con due modalità:&lt;/strong&gt;&lt;br /&gt;
    1) Tramite Web.config verificando l'attributo debug=true (del tag compilation). Da osservare come questo venga rimosso in fase di publishing tramite web.config transformation (quindi in release le risorse vengono compattate e minificate automaticamente) mentre in fase di sviluppo questo è impostato di default a true e le ottimizzazioni non sono applicate.&lt;br /&gt;
    2) Tramite chiamata al metodo BundleTable.EnableOptimizatoins=true/false.&lt;br /&gt;
    In ogni caso, imho, l'impostazione di default è ottima.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Grazie agli ultimi due punti, la libreria optimization è finalmente utilizzabile in modo proficuo. Benone.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org:443/ainotame/aggbug/101044.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Roberto Sarati</dc:creator>
            <guid>http://blogs.ugidotnet.org:443/ainotame/archive/2012/06/07/asp.net-mvc4-rc-bundles.aspx</guid>
            <pubDate>Thu, 07 Jun 2012 18:20:22 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org:443/ainotame/archive/2012/06/07/asp.net-mvc4-rc-bundles.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org:443/ainotame/comments/commentRss/101044.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org:443/ainotame/services/trackbacks/101044.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET 4.5 Encoded data-binding</title>
            <link>http://blogs.ugidotnet.org:443/ainotame/archive/2012/03/21/asp.net-4.5-encoded-data-binding.aspx</link>
            <description>&lt;p&gt;Rimanendo sempre valido, sia in webform che in asp.net mvc, la chiamata a Server.HtmlEncode(string), la sintassi aiuta a non riempire le pagine di questo statement un po' prolisso (e ripetitivo). In particolare:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;In WebForm si può utilizzare&lt;strong&gt; &amp;lt;%:&lt;/strong&gt; string &lt;strong&gt;%&amp;gt;&lt;/strong&gt; &lt;/li&gt;
    &lt;li&gt;In ASP.NET MVC (razor), la sintassi &lt;strong&gt;@&lt;/strong&gt;string, effettua l'encoding sempre e comunque.&lt;br /&gt;
    Il problema potrebbe essere l'opposto, ovvero non fare l'encoding, possibile tramite &lt;strong&gt;@Html.Raw&lt;/strong&gt;(string)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In WebForm tuttavia nei databinding (Eval o Bind) non è disponibile alcuna sintassi particolare fino alla versione 4.5 di ASP.NET, che permette di scrivere:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;&amp;lt;%#:&lt;/strong&gt; Eval("Property") &lt;strong&gt;%&amp;gt;&lt;/strong&gt; o meglio con i controlli strongly-typed &lt;strong&gt;&amp;lt;%#:&lt;/strong&gt; Item.Property &lt;strong&gt;%&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ora non ci sono più scuse.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org:443/ainotame/aggbug/100878.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Roberto Sarati</dc:creator>
            <guid>http://blogs.ugidotnet.org:443/ainotame/archive/2012/03/21/asp.net-4.5-encoded-data-binding.aspx</guid>
            <pubDate>Wed, 21 Mar 2012 00:44:28 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org:443/ainotame/archive/2012/03/21/asp.net-4.5-encoded-data-binding.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org:443/ainotame/comments/commentRss/100878.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org:443/ainotame/services/trackbacks/100878.aspx</trackback:ping>
        </item>
    </channel>
</rss>