<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><channel><title>PeppeDotNet Blog - Category: ASP.NET</title><link>http://www.peppedotnet.it/Blog/Categoria/ASP.NET/</link><description>Marchi Giuseppe personal blog</description><dc:language>it-it</dc:language><pubDate>Fri, 22 Oct 2004 00:00:00 GMT</pubDate><lastBuildDate>Sat, 25 May 2013 07:24:29 GMT</lastBuildDate><webMaster>info@peppedotnet.it (Giuseppe Marchi)</webMaster><managingEditor>info@peppedotnet.it (Giuseppe Marchi)</managingEditor><copyright>PeppeDotNet 2004/06</copyright><generator>dotRss 0.9.3.28434 Beta2 - http://www.peppedotnet.it/Projects/dotRSS.aspx</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><category>.NET and Sharepoint programming</category><ttl>60</ttl><image><title>PeppeDotNet</title><url>http://www.peppedotnet.it/img/logo.gif</url><link>http://www.peppedotnet.it/Blog</link><width>144</width><height>30</height><description>PeppeDotNet.it</description></image><item><title>Le mie sessioni alla SharePoint Conference 2013</title><link>http://www.peppedotnet.it/Blog/MySessionsAtSharePointConference2013.aspx</link><pubDate>Mon, 25 Feb 2013 09:35:57 GMT</pubDate><description>&lt;div style="margin: 10px; float: right; background: #333"&gt;&lt;img src="http://www.peppedotnet.it/Images/spoc-invert_mod.png" alt="SharePoint Conference 2013" /&gt;&lt;/div&gt;Bene, direi che ormai ci siamo.
&lt;br /&gt;La prossima settimana si aprono i tendoni della &lt;a href="http://www.sharepointconference.it" title="SharePoint Conference 2013" target="_blank"&gt;SharePoint Conference italiana&lt;/a&gt;, 3 giornate di sessioni tecniche sulle novità di SharePoint 2013 ed Office 2013, con speaker nazionali ed internazionali.
&lt;br /&gt;Io ho appena finito di preparare il materiale. Strano ma vero, ho impacchettato e spedito tutto quanto con una settimana di anticipo. Probabilmente è perché quest’anno ho un totale di 5 sessioni, di cui una per IT PRO, e forse mi sono cagato sotto di non arrivare in tempo :) Poco importa, l’importante è arrivare in fondo no?
&lt;br /&gt;In ogni caso, prima di incontrarci al Centro Congressi Milano Fiori, volevo darvi una preview di quello che vedremo durante le mie sessioni.
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;DEV312 - HTML5/JavaScript for SharePointers - 6 marzo, 9.00 - Sala B&lt;/b&gt;
&lt;br /&gt;Senza togliere niente alle altre, è sicuramente la sessione che mi è piaciuto di più preparare. In questi periodi, il web sta prendendo una via chiara e decisa. Seguendo la scia di applicazioni con una user experience veramente elevata, facili all’uso, con un forte impatto grafico e interattivo. Applicazioni che fanno un uso (a volte) spropositato di Javascript, linguaggio che noi (poveri) sviluppatori SharePoint non sempre abbiamo avuto il tempo di approfondire. Siamo sempre stati troppo impegnati con il server object model di SharePoint, il provisioning, ecc…
&lt;br /&gt;In questa sessione cercherò di riportarvi quella che è stata la mia esperienza di approccio al Javascript dallo sviluppo server-side e SharePoint, passando dalle basi, ai modi per evitare problemi, alle tecniche più avanzate per scrivere applicazioni di front-end di alto livello. Speriamo di farcela in un’ora è 15 :)
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;DEV321 - L'app-model di SharePoint 2013 dalla A... - 6 marzo, 10.35 - Sala B&lt;/b&gt;
&lt;br /&gt;Dopo REST, l’app-model è sicuramente la novità più importante di SharePoint 2013 per noi sviluppatori e imparare da subito tutto ciò che sta dietro questo nuovo modello è sicuramente un bel progetto.
&lt;br /&gt;Ho cercato di dividere tutti i contenuti tra questa sessione e quella dopo, ma ho dovuto togliere qualcosa purtroppo. Erano davvero tanti.
&lt;br /&gt;Partiremo sicuramente dall’architettura del nuovo modello, per poi porre attenzione sulle SharePoint-Hosted Apps. Parlando di tecniche di programmazione, provisioning, configurazione, accesso ai dati esterni, App Parts e di tanto altro ancora.
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;DEV322 - L'app-model di SharePoint 2013 ... alla Z - 6 marzo, 12.00 - Sala B&lt;/b&gt;
&lt;br /&gt;Questa sessione continuerà il discorso della precedente, portando però l’attenzione sulle Cloud-Hosted Apps (quindi le Auto-Hosted e le Provider-Hosted).
&lt;br /&gt;E’ la sessione poco prima di pranzo, parlo già da 3 ore filate e gli argomenti sono più ostici rispetto alla sessione precedente.. quindi forza e coraggio! ;)
&lt;br /&gt;Vedremo tutto riguardo le App che vengono eseguite al di fuori del contesto di SharePoint, parlando anche qua di architettura (soprattutto di autenticazione), tecniche di programmazione, provisioning, Azure, ecc…
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;IT334 - App Management Service Application - 7 marzo, 14.30 - Sala B&lt;/b&gt;
&lt;br /&gt;Ecco, dopo aver snocciolato per 2 ore e mezza tutto per quanto riguarda lo sviluppo di App è venuto il momento degli IT PRO. Esatto, avete capito bene. Quest’anno tengo una sessione per sistemisti (roba da matti :), in cui cercherò di fargli capire come configurare una Farm SharePoint 2013 per permettere il corretto funzionamento delle App e come gestire richieste, licenze, app catalog, store, e tutto il resto che gravita intorno ad esse.
&lt;br /&gt;Devo esser sincero però... spero tanto che venga qualcuno “dei nostri” a darmi supporto con qualche domanda prettamente dev o robe del genere :)
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;EXPO - Geolocalization in SharePoint 2013 - 5 marzo, 14.45 - Sala EXPO&lt;/b&gt;
&lt;br /&gt;Ed eccoci arrivati al teatrino. Questa è una sessione gratuita, quindi aperta al pubblico, in cui cercherò di farvi vedere una nuova funzionalità introdotta in SharePoint 2013 che permette all’utente finale e allo sviluppatore di sfruttare il servizio di mappe di Bing direttamente all’interno delle strutture di SharePoint (quindi liste e document library).
&lt;br /&gt;La sessione dura solo mezz’ora, ma cercheremo anche qua di vedere tutto quanto, dando un taglio più pratico per chi di voi vuole sin da subito sfruttare questa nuova funzionalità all’interno delle proprie applicazioni.
&lt;br /&gt;
&lt;br /&gt;Per concludere, sono molto orgoglioso di dirvi che quest’anno la mia azienda (&lt;a href="http://www.dev4side.com" title="Dev4Side S.r.l." target="_blank"&gt;Dev4Side S.r.l.&lt;/a&gt;) sarà presente come sponsor gold all’interno della conferenza. Il che significa che troverete dentro il materiale che vi verrà consegnato, la nostra brochure ed una piccola sorpresina ;)
&lt;br /&gt;
&lt;br /&gt;Che dire d’altro? Vi aspetto numerosi!
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint 2013.aspx" title="TAG: SharePoint 2013"&gt;SharePoint 2013&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/App model.aspx" title="TAG: App model"&gt;App model&lt;/a&gt;][&lt;a href="http://www.peppedotnet.it/Tags/SharePoint Conference.aspx" title="TAG: SharePoint Conference"&gt;SharePoint Conference&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/MySessionsAtSharePointConference2013.aspx#comm</comments><guid>/Blog/MySessionsAtSharePointConference2013.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/682.aspx</trackback:ping></item><item><title>.NET Campus 2012: manca meno di una settimana</title><link>http://www.peppedotnet.it/Blog/UmbracoAtDotNetCampus.aspx</link><pubDate>Sun, 15 Apr 2012 15:11:50 GMT</pubDate><description>&lt;div style="float: right; margin-left: 10px"&gt;&lt;a href="http://www.dotnetcampus.it" title=".NET Campus 2012" target="_blank"&gt;&lt;img src="http://www.peppedotnet.it/Images/Banner-180x150_2012_9.gif" alt=".NET Campus 2012"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;Sabato prossimo (21 Aprile 2012) si terrà la nuova edizione del &lt;a href="http://www.dotnetcampus.it" title=".NET Campus 2012" target="_blank"&gt;.NET Campus&lt;/a&gt;, la conferenza organizzata dal gruppo DevLeap assieme con Microsoft per portare la tecnologia Microsoft presso l'Università.
&lt;br /&gt;C'è sicuramente grande aspettativa per la giornata. Ci sono già oltre 2000 iscritti, è stato battuto il record dell'anno scorso, assieme a tantissimi speaker di livello nazionale ed internazionale che porteranno avanti più di 40 sessioni tecniche a partire dallo sviluppo in Windows 8 e Windows Phone 7, passando per Azure, per arrivare alle novità di ASP.NET, WCF, Entitiy Framework, ecc..
&lt;br /&gt;
&lt;br /&gt;Anche quest'anno ci sarò anch'io sul palco. La sopresa èp che non parlerò di SharePoint! Almeno durante la sessione, se poi qualcuno ne vuol parlare tra una sessione e l'altra io son solo contento :)
&lt;br /&gt;Quest'anno è la volta di &lt;a href="http://umbraco.com/" title="Umbraco.com" target="_blank"&gt;Umbraco&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;Cos'è Umbraco?
&lt;br /&gt;E' un CMS open source stra-figo, scritto in ASP.NET, attraverso il quale è possibile creare siti internet ed applicazioni in maniera veramente facile e veloce per noi sviluppatori web.
&lt;br /&gt;
&lt;br /&gt;Durante la sessione, vedremo quindi un'introduzione al prodotto e le principali conoscenze che dovete acquisire per creare il vostro primo sito con Umbraco.
&lt;br /&gt;Per chi non lo conosce, vi assicuro che rimarrete veramente soddisfatti.
&lt;br /&gt;Quindi, l'appuntamento è per sabato 21 Aprile 2012 alle 10 di mattina presso l'Università di Roma 3 in Via della Vasca Navale 79.
&lt;br /&gt;
&lt;br /&gt;Se vi siete già iscritti o se &lt;a href="http://dotnetcampus.it/Register/Roma" title="Iscrivit al .NET Campus" target="_blank"&gt;pensate di farlo&lt;/a&gt; e venire, fatevi riconoscere mi raccomando! ;)
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/.NET Campus.aspx" title="TAG: .NET Campus"&gt;.NET Campus&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Umbraco.aspx" title="TAG: Umbraco"&gt;Umbraco&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/UmbracoAtDotNetCampus.aspx#comm</comments><guid>/Blog/UmbracoAtDotNetCampus.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/638.aspx</trackback:ping></item><item><title>Vulnerabilit&#224; di ASP.NET del 28 dicembre 2011, in grado di causare un DoS</title><link>http://www.peppedotnet.it/Blog/ASPNETVulnerability28December2011.aspx</link><pubDate>Thu, 29 Dec 2011 12:41:00 GMT</pubDate><description>Ieri (28 dicembre 2011) è uscito l'annuncio di una vulnerabilità di ASP.NET presente su tutte le versione del .NET Framework.
&lt;br /&gt;Se volete i dettagli, potete leggere tutto a questo indirizzo:
&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/security/advisory/2659883" title="" target="_blank"&gt;http://technet.microsoft.com/en-us/security/advisory/2659883&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;La vulnerabilità è legata all'utilizzo delle hash-table utilizzate in ambiente web. Attacchi che sfruttano questa tipologia di exploit, sono chiamati infatti "hash collision attacks" e hanno la peculiarità di cercare di provocare un denial of service popolando una o più collezioni di dati con una mole gigantesca di elementi.
&lt;br /&gt;
&lt;br /&gt;Dal blog di &lt;a href="http://weblogs.asp.net/scottgu/archive/2011/12/28/asp-net-security-update-shipping-thursday-dec-29th.aspx" title="Scott Guthrie" target="_blank"&gt;Scott Guthrie&lt;/a&gt; si evince che oggi (29 dicembre 2011, intorno alle ore 19:00 italiane) sarà rilasciata la patch per chiudere questo buco tramite Windows Update.
&lt;br /&gt;Quindi il consiglio è di aggiornare tutte le vostre macchine in cui girano applicazioni ASP.NET dalla versione 1.0 in poi.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Security.aspx" title="TAG: Security"&gt;Security&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNETVulnerability28December2011.aspx#comm</comments><guid>/Blog/ASPNETVulnerability28December2011.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/617.aspx</trackback:ping></item><item><title>Community Days 2012 - Milano, 16 e 17 febbraio 2012</title><link>http://www.peppedotnet.it/Blog/IscrivitiAiCommunityDays.aspx</link><pubDate>Thu, 15 Dec 2011 15:40:55 GMT</pubDate><description>&lt;img src="http://www.peppedotnet.it/Images/communityDays600x220.png" alt="Community Days 2012" border="0" style="float:right; margin-left: 10px" /&gt;Vi avevo &lt;a href="http://www.peppedotnet.it/Blog/CommunityDays2010IscrizioniAperte.aspx" title="Primo avviso dei Community Days" target="_blank"&gt;già avvisato&lt;/a&gt; prima, ma ci tengo a ridirvelo.. che ASPItalia e UgiDotNet stanno organizzando veramente un gran bell'evento ;)
&lt;br /&gt;In soldoni.. SharePointCommunity.it, in collaborazione con le altre community ed user group italiani, partecipa e presenta il maggior evento community dell'anno: 12 track spalmate su 2 giorni interamenti dedicati alle ultime tecnologie, 4 lab ed i migliori speaker italiani.
&lt;br /&gt;
&lt;br /&gt;Windows 8, Windows Phone, Entity Framework, ASP.NET, .NET Framework 4.5 e Visual Studio 2011, applicazioni mobili, HTML 5 e tanto, tanto altro ancora!
&lt;br /&gt;
&lt;br /&gt;La partecipazione, come sempre, è totalmente gratuita. 
&lt;br /&gt;Le iscrizioni sono aperte e l'agenda è disponibile sul sito. ISCRIVETEVI SUBITO!
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://www.communitydays.it/events/communitydays-2012/" title="Iscriviti ai Community Days 2012" target="_blank"&gt;http://www.communitydays.it/events/communitydays-2012/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Quest'anno parteciperò anche io come speaker, con una sessione sullo sviluppo in SharePoint 2010 per chi di voi proviene da ASP.NET; non potete mancare.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Community Days.aspx" title="TAG: Community Days"&gt;Community Days&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint Community.aspx" title="TAG: SharePoint Community"&gt;SharePoint Community&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/IscrivitiAiCommunityDays.aspx#comm</comments><guid>/Blog/IscrivitiAiCommunityDays.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/613.aspx</trackback:ping></item><item><title>Community tour su SharePoint Online @ SMAU di Padova - 5 maggio 2011</title><link>http://www.peppedotnet.it/Blog/SharePointOnlineCommunityTourSMAUPadova.aspx</link><pubDate>Tue, 26 Apr 2011 17:50:28 GMT</pubDate><description>&lt;div style="float: right; margin-left: 10px;"&gt;&lt;a title="SharePointCommunity.it - La community italiana per i professionisti SharePoint" href="http://www.sharepointcommunity.it" target="_blank"&gt;&lt;img alt="SharePointCommunity.it - La community italiana per i professionisti SharePoint" src="http://www.peppedotnet.it/Images/spCommunity.jpg"&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://www.powershell.it/ReusableItems/Graphics/News/sb11_logo_padova11.jpg" alt="SMAU PADOVA" /&gt;&lt;/div&gt;Per noi juventini il 5 maggio è solitamente una bella giornata :) e questa volta lo è anche per noi "SharePointiani".. 
&lt;br /&gt;&lt;a href="http://www.sharepointcommunity.it/news/Lists/Events/DispForm.aspx?ID=13" title="SharePoint Community @ SMAU Padova" target="_blank"&gt;SharePointCommunity.it&lt;/a&gt;, la community italiana per professionisti che lavorano su SharePoint, assieme a PowerShell.it (la community italiana su Windows PowerShell) partecipa al community tour di Microsoft presentando due sessioni durante lo &lt;a href="http://www.microsoft.com/italy/smau-business/default.aspx" title="SMAU Padova" target="_blank"&gt;SMAU di Padova&lt;/a&gt; il giorno 5 maggio 2011.
&lt;br /&gt;Nello specifico, io vi darò un'introduzione e un'anteprima di SharePoint Online (la piattaforma di collaborazione on the cloud, targata Office 365) e Francesco vi parlerà invece di virtualizzazione.
&lt;br /&gt;Questa l'agenda nel dettaglio:
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-decoration: underline"&gt;10:00 - 10:30&lt;/span&gt;
&lt;br /&gt;&lt;b&gt;Welcome e keynote - PierGiorgio Malusardi&lt;/b&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-decoration: underline"&gt;10:30 - 11:30&lt;/span&gt;
&lt;br /&gt;&lt;b&gt;SharePoint in the cloud - Giuseppe Marchi&lt;/b&gt;
&lt;br /&gt; In questa sessione cercheremo di conoscere l'offerta di Microsoft per quanto riguarda SharePoint in the cloud, all'interno del programma Office 365. Vedremo quali sono le principali caratteristiche e funzionalità del prodotto, le differenze rispetto alle normali installazioni on-premise e le modalità di gestione di contenuti e infrastruttura, assieme alle modalità di deployment di eventuali personalizzazioni. 
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-decoration: underline"&gt;11:30 - 12:30&lt;/span&gt;
&lt;br /&gt;&lt;b&gt;Virtualize a SharePoint 2010 Environment - Francesco Sodano&lt;/b&gt;
&lt;br /&gt;La virtualizzazione degli ambienti di sviluppo e produzione rappresentano ormai uno standard aziendale in molte società. In questa sessione si farà il punto su come è possibile virtualizzare un ambiente SharePoint 2010 su Microsoft Hyper-V (sia esso sviluppo o produzione), quali sono i vantaggi offerti e i punti di attenzione da tenere presente. Si mostrerà inoltre come creare una macchina virtuale SharePoint 2010 da utilizzare come template per SCVMM.
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-decoration: underline"&gt;12:30 - 13:30&lt;/span&gt;
&lt;br /&gt;&lt;b&gt; Windows PowerShell 2.0 ed il remote management - Efran Cobisi&lt;/b&gt;
&lt;br /&gt;Il remote management è una delle novità più interessanti di PowerShell 2.0 e consente di gestire in completa autonomia e sicurezza le proprie macchine attraverso la rete, dalla riga di comando; non si tratta di un semplice sostituto di RCMD ma di una nuova ed articolata infrastruttura, costruita sulle basi del framework 
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;Per registrarvi dovete seguire questo link:
&lt;br /&gt;&lt;a href="http://www.smau.it/visitor/register/microsoft-07/" title="Iscritivi a SMAU Padova" target="_blank"&gt;http://www.smau.it/visitor/register/microsoft-07/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Vi aspettiamo ! ;)
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint.aspx" title="TAG: SharePoint"&gt;SharePoint&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint Online.aspx" title="TAG: SharePoint Online"&gt;SharePoint Online&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Office 365.aspx" title="TAG: Office 365"&gt;Office 365&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint Community.aspx" title="TAG: SharePoint Community"&gt;SharePoint Community&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/SharePointOnlineCommunityTourSMAUPadova.aspx#comm</comments><guid>/Blog/SharePointOnlineCommunityTourSMAUPadova.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/581.aspx</trackback:ping></item><item><title>On-line l'agenda della SharePoint Conference 2011 !</title><link>http://www.peppedotnet.it/Blog/SPOC2011AgendaOnLine.aspx</link><pubDate>Fri, 11 Feb 2011 20:33:23 GMT</pubDate><description>&lt;img style="margin: 2px; float: right" alt="SharePoint Conference 2011" src="http://www.peppedotnet.it/Images/SPOC2011_small.png" /&gt;Da pochi minuti è on-line l'&lt;a href="http://www.sharepointconference.it/events/2011/agenda.aspx" title"Agenda SharePoint Conference 2011" target="_blank"&gt;agenda&lt;/a&gt; della SharePoint Conference 2011, che si terrà il 19,20 e 21 Aprile 2011 qui a Milano.
&lt;br /&gt;
&lt;br /&gt;Queste le sessioni fin'ora pubblicate:
&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;ALL302&lt;/td&gt;&lt;td&gt;Dall'analisi all'architettura delle informazioni: i segreti per un progetto SharePoint di successo&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ALL321&lt;/td&gt;&lt;td&gt;SharePoint Performance Tuning for Public web sites&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ALL322&lt;/td&gt;&lt;td&gt;Enterprise Project Management with SharePoint 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BI201&lt;/td&gt;&lt;td&gt;PowerPivot Architecture &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BI202&lt;/td&gt;&lt;td&gt;DAX Introduction &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BI203&lt;/td&gt;&lt;td&gt;BISM - BI Semantic Model &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BI303&lt;/td&gt;&lt;td&gt;Business Intelligence in Microsoft SharePoint Server 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BI304&lt;/td&gt;&lt;td&gt;Reporting Services 2008 R2 in SharePoint 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BI305&lt;/td&gt;&lt;td&gt;Excel Services in SharePoint 2010: Funzionalità e soluzioni &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BI306&lt;/td&gt;&lt;td&gt;Common Patterns in PowerPivot &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BI442&lt;/td&gt;&lt;td&gt;Deploying PerformancePoint Services 2010 and PowerPivot Services 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CM201&lt;/td&gt;&lt;td&gt;Applying Web Design to a SharePoint Publishing Site &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CM321&lt;/td&gt;&lt;td&gt;Implementing Document Management Solutions with SharePoint 2010 and Office 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DAT301&lt;/td&gt;&lt;td&gt;Content Type Discovery using Dependency Structure Matrix Analysis &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DAT321&lt;/td&gt;&lt;td&gt;All around Metadata &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DAT422&lt;/td&gt;&lt;td&gt;Inside SharePoint Business Connectivity Services &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DEV301&lt;/td&gt;&lt;td&gt;Silverlight 4 and SharePoint 2010 get married! &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DEV302&lt;/td&gt;&lt;td&gt;Sandboxed Solutions in SharePoint &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DEV303 &lt;/td&gt;&lt;td&gt;5 ways to build a CRM application on top SharePoint 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DEV321&lt;/td&gt;&lt;td&gt;Sviluppare Applicazioni con Windows Phone 7 e SharePoint 2010 &lt;/td&gt;&lt;/tr&gt;
&lt;br /&gt;&lt;tr&gt;&lt;td&gt;DEV322 &lt;/td&gt;&lt;td&gt;Unit test and SharePoint, you can! &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DEV423&lt;/td&gt;&lt;td&gt;Developing a SharePoint 2010 Service Application &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DEV424&lt;/td&gt;&lt;td&gt;Troubleshooting e Debugging di applicazioni SharePoint &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DEV425&lt;/td&gt;&lt;td&gt;Il Client Object Model di SharePoint 2010 &lt;/td&gt;&lt;/tr&gt;
&lt;br /&gt;&lt;tr&gt;&lt;td&gt;DEV425&lt;/td&gt;&lt;td&gt;SharePoint 2010 Workflow Development &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ENT201&lt;/td&gt;&lt;td&gt;Duet Enterprise overview &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ENT302&lt;/td&gt;&lt;td&gt;Building Enterprise Records Management Solutions for SharePoint 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IT321&lt;/td&gt;&lt;td&gt;SharePoint 2010 Administration Best Practices &lt;/td&gt;&lt;/tr&gt;
&lt;br /&gt;&lt;tr&gt;&lt;td&gt;IT322&lt;/td&gt;&lt;td&gt;Assicurare lunga vita alla propria SharePoint farm: logging, monitoring, throttling &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IT323&lt;/td&gt;&lt;td&gt;Configurazione e personalizzazione della User Profile Service Application &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OFF321&lt;/td&gt;&lt;td&gt;SharePoint Workspace and Business Connectivity Service: Collaboration without compromise &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OFF322&lt;/td&gt;&lt;td&gt;Access Service Development for SharePoint 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ONL201&lt;/td&gt;&lt;td&gt;Introduzione a Microsoft Office 365 &lt;/td&gt;&lt;/tr&gt;
&lt;br /&gt;&lt;tr&gt;&lt;td&gt;ONL302&lt;/td&gt;&lt;td&gt;Introduzione a SharePoint Online &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ONL303&lt;/td&gt;&lt;td&gt;SharePoint 2010 Communications with Lync 2010 &amp; Outlook 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ONL304 &lt;/td&gt;&lt;td&gt;Integrare SharePoint Server 2010 con Exchange Server 2010 &amp; Lync Server 2010: How-to &amp; Best Practice&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SB301 &lt;/td&gt;&lt;td&gt;XSLT, HTML, CSS, AJAX, jQuery... all you need to know! &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SB302&lt;/td&gt;&lt;td&gt;Costruire soluzioni complete con SharePoint 2010 senza scrivere codice &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SB321&lt;/td&gt;&lt;td&gt;Building Solutions with InfoPath 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SB322&lt;/td&gt;&lt;td&gt;Building Workflow Solutions with SharePoint 2010&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;SB421&lt;/td&gt;&lt;td&gt;Costruire un sito Internet con SharePoint 2010 in 60 minuti &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SEC321&lt;/td&gt;&lt;td&gt;Access Control Service e SharePoint &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SRC322&lt;/td&gt;&lt;td&gt;Personalizzare l'Enterprise Search in SharePoint Sever 2010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SRC323 &lt;/td&gt;&lt;td&gt;FAST for SharePoint 2010 vs Fast Search for Internet Site drill down &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;Per quanto riguarda l'iscrizione, ad oggi è scdauto il "super early bind" ma è ancora in vigore l'Early Bind che vi permette di risparmiare fino a 90 euro sul costo dell'iscrizione.
&lt;br /&gt;Vi ricordo che per iscriversi, potete compilare il form direttamente dal sito della conferenza:
&lt;br /&gt;&lt;a href="http://www.sharepointconference.it/events/2011/register.aspx" title="Iscrizione a SharePoint Conference 2011" target="_blank"&gt;http://www.sharepointconference.it/events/2011/register.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Forza forza !!
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint.aspx" title="TAG: SharePoint"&gt;SharePoint&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint 2010.aspx" title="TAG: SharePoint 2010"&gt;SharePoint 2010&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint Conference.aspx" title="TAG: SharePoint Conference"&gt;SharePoint Conference&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/SPOC2011AgendaOnLine.aspx#comm</comments><guid>/Blog/SPOC2011AgendaOnLine.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/555.aspx</trackback:ping></item><item><title>Security Advisory 2416728 (vulnerabilit&#224; in ASP.NET) e SharePoint 2010</title><link>http://www.peppedotnet.it/Blog/SecurityAdvisory2416728VulnerabilityInASPNETAndSharePoint.aspx</link><pubDate>Tue, 21 Sep 2010 15:53:08 GMT</pubDate><description>Di recente Microsoft ha rilasciato un &lt;a href="https://www.microsoft.com/technet/security/advisory/2416728.mspx" title="Microsoft Security Advisory" target="_blank"&gt;Security Advisory&lt;/a&gt; in cui segnala un'importante vulnerabilità su qualsiasi versione di ASP.NET (dalla 1.1 alla 4.0) che è in grado, in condizioni particolari, di permettere anche l'accesso dei file da remoto.
&lt;br /&gt;Questa vulnerabilità ha pieno effetto se l'applicazione ASP.NET è stata configurata tramite web.config per mostrare l'errore completo.
&lt;br /&gt;Micorosft ha messo subito a disposizione uno &lt;a href="http://blogs.technet.com/b/srd/archive/2010/09/17/understanding-the-asp-net-vulnerability.aspx" title="Script per controllare se il tuo web.config è affetto dalla vulnerabilità" target="_blank"&gt;script&lt;/a&gt; per controllare in maniera automatica se i vostri file web.config sono affetti o meno da questo problema.
&lt;br /&gt;
&lt;br /&gt;Trovate maggiori informazioni riguardo questa vulnerabilità direttamente dal sito di &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" title="Scott Guthrie" target="_blank"&gt;Scott Guthrie&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;Ecco, dobbiamo sapere che anche SharePoint Foundation 2010 e SharePoint Server 2010 sono affetti dalla medesima vulnerabilità e all'interno del &lt;a href="http://blogs.msdn.com/b/sharepoint/archive/2010/09/21/security-advisory-2416728-vulnerability-in-asp-net-and-sharepoint.aspx" title="Security Advisory 2416728 (Vulnerability in ASP.NET) and SharePoint" target="_blank"&gt;blog del team di SharePoint&lt;/a&gt; troviamo i passi per correggerla.
&lt;br /&gt;Questi i passi da seguire:
&lt;br /&gt;
&lt;br /&gt;1- Aprire la directory %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\template\layouts. 
&lt;br /&gt;2- Creare un nuovo file, chiamato "error2.aspx" ed inserirci questo contenuto: 
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;%@&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Page Language&lt;span style='color:#0000FF'&gt;="C#"&lt;/span&gt; AutoEventWireup&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt; %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;%@&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Import Namespace&lt;span style='color:#0000FF'&gt;="System.Security.Cryptography"&lt;/span&gt; %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;%@&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Import Namespace&lt;span style='color:#0000FF'&gt;="System.Threading"&lt;/span&gt; %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;script&lt;/span&gt;&lt;span style='color:#FF0000'&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;   void Page_Load() {
&lt;br /&gt;      byte[] delay = new byte[1];
&lt;br /&gt;      RandomNumberGenerator prng = new RNGCryptoServiceProvider();
&lt;br /&gt;
&lt;br /&gt;      prng.GetBytes(delay);
&lt;br /&gt;      Thread.Sleep((int)delay[0]);
&lt;br /&gt;        
&lt;br /&gt;      IDisposable disposable = prng as IDisposable;
&lt;br /&gt;      if (disposable != null) { disposable.Dispose(); }
&lt;br /&gt;    }
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;script&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;html&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;head&lt;/span&gt;&lt;span style='color:#FF0000'&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;title&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;Error&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;title&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;head&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;body&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;div&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        An error occurred while processing your request.
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;div&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;body&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;html&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;3- Aprire la directory %SystemDrive%\inetpub\wwwroot\wss\virtualdirectories. 
&lt;br /&gt;4- Per ognuna delle sottodirectory presenti, seguire queste istruzioni: 
&lt;br /&gt;- modificare il file web.config 
&lt;br /&gt;- recuperare la sezione customErrors e modificarla come segue:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;customErrors&lt;/span&gt;&lt;span style='color:#FF0000'&gt; mode&lt;span style='color:#0000FF'&gt;="On"&lt;/span&gt; redirectMode&lt;span style='color:#0000FF'&gt;="ResponseRewrite"&lt;/span&gt; defaultRedirect&lt;span style='color:#0000FF'&gt;="/_layouts/error2.aspx"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;- salvare
&lt;br /&gt;- eseguire un IISRESET /NOFORCE 
&lt;br /&gt;
&lt;br /&gt;Nota: chiaramente se avete modificato i percorsi per le vostre web application sul file system, dovrete modificare anche i web.config inseriti al loro interno.
&lt;br /&gt;
&lt;br /&gt;Se non volete fare queste operazioni a mano, c'è chi ha creato una soluzione WSP per voi da installare in grado di correggere automaticamente la vulnerabilità. La potete trovare a questo indirizzo:
&lt;br /&gt;&lt;a href="http://shojeeb.com/sharepoint/security-advisory-2416728-vulnerability-in-asp-net-and-sharepoint/" title="Security Advisory 2416728 workaround for SharePoint" target="_blank"&gt;http://shojeeb.com/sharepoint/security-advisory-2416728-vulnerability-in-asp-net-and-sharepoint/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;Raccomando tutti di eseguire subito i controlli del caso !
&lt;br /&gt;Se volete maggiori informazioni, ecco qua un pò di link utili:
&lt;br /&gt;
&lt;br /&gt;- &lt;a href="https://www.microsoft.com/technet/security/advisory/2416728.mspx" target="_blank"&gt;Microsoft Security Advisory (2416728)&lt;/a&gt; (Vulnerability in ASP.NET Could Allow Information Disclosure)
&lt;br /&gt;- &lt;a href="http://blogs.technet.com/b/msrc/archive/2010/09/17/security-advisory-2416728-released.aspx" target="_blank"&gt;Security Advisory 2416728 Released&lt;/a&gt; (dal blog di Microsoft Security Response Center)
&lt;br /&gt;- &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" target="_blank"&gt;Important: ASP.NET Security Vulnerability&lt;/a&gt; (dal blog di Scott Guthrie’s) 
&lt;br /&gt;- &lt;a href="http://www.aspitalia.com/focuson/1173/Vulnerabilita-0Day-ASP.NET-Rischio-Applicazioni-Configurate-Correttamente.aspx" target="_blank"&gt;Vulnerabilità 0-Day per ASP.NET: a rischio le applicazioni non configurate correttamente&lt;/a&gt; (dal blog di Daniele Bochicchio)
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint.aspx" title="TAG: SharePoint"&gt;SharePoint&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint 2010.aspx" title="TAG: SharePoint 2010"&gt;SharePoint 2010&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/SecurityAdvisory2416728VulnerabilityInASPNETAndSharePoint.aspx#comm</comments><guid>/Blog/SecurityAdvisory2416728VulnerabilityInASPNETAndSharePoint.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/511.aspx</trackback:ping></item><item><title>Disponibile l'SDK di Silverlight 4.0 in italiano</title><link>http://www.peppedotnet.it/Blog/Silverligh4SDKInItaliano.aspx</link><pubDate>Sat, 12 Jun 2010 17:11:00 GMT</pubDate><description>&lt;img src="http://www.peppedotnet.it/Images/silverlight.png" width="70px" alt="Silverlight 4.0" style="float: right; margin: 5px;" /&gt;Da ieri, è disponibile l'SDK di Silverlight 4.0 localizzato in lingua italiana.
&lt;br /&gt;Ecco il link per il download diretto:
&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;FamilyID=55b44da3-e5de-4d2a-8eaf-1155ca6b3207" title="Microsoft Silverlight 4 SDK"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;FamilyID=55b44da3-e5de-4d2a-8eaf-1155ca6b3207&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Silverlight.aspx" title="TAG: Silverlight"&gt;Silverlight&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Silverlight 4.aspx" title="TAG: Silverlight 4"&gt;Silverlight 4&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/Silverligh4SDKInItaliano.aspx#comm</comments><guid>/Blog/Silverligh4SDKInItaliano.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/470.aspx</trackback:ping></item><item><title>SharePoint 2010 sar&#224; solo a 64 bit !</title><link>http://www.peppedotnet.it/Blog/SharePoint2010Only64Bit.aspx</link><pubDate>Thu, 14 May 2009 10:41:14 GMT</pubDate><description>La notizia viene direttamente dal blog del team di SharePoint.
&lt;br /&gt;&lt;a href="http://blogs.msdn.com/sharepoint/archive/2009/05/07/announcing-sharepoint-server-2010-preliminary-system-requirements.aspx" title="Announcing SharePoint Server 2010 Preliminary System Requirements"&gt;http://blogs.msdn.com/sharepoint/archive/2009/05/07/announcing-sharepoint-server-2010-preliminary-system-requirements.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;SharePoint 2010 avrà solamente la versione a 64 bit e necessiterà di:&lt;ul&gt;&lt;li&gt;Windows Server 2008, sempre a 64 bit&lt;/li&gt;&lt;li&gt;SQL Server 2008 o 2005, anche questi a 64 bit&lt;/li&gt;&lt;/ul&gt;Questa cosa, è sicuramente da tenere in considerazione per tutte le nuove installazioni di SharePoint fatte da ora in poi..
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint 2010.aspx" title="TAG: SharePoint 2010"&gt;SharePoint 2010&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint.aspx" title="TAG: SharePoint"&gt;SharePoint&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/SharePoint2010Only64Bit.aspx#comm</comments><guid>/Blog/SharePoint2010Only64Bit.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/375.aspx</trackback:ping></item><item><title>Microsoft Web Platform Installer</title><link>http://www.peppedotnet.it/Blog/MicrosoftWebPlatformInstaller.aspx</link><pubDate>Tue, 07 Oct 2008 10:26:28 GMT</pubDate><description>Questa è proprio una bella notizia !
&lt;br /&gt;Microsoft ha rilasciato, ancora in versione beta, un tool che provvede all'installazione dell'intera piattaforma web per lo sviluppo e il rilascio in produzione delle proprie applicazioni .NET !
&lt;br /&gt;Questo il sito di riferimento:
&lt;br /&gt;&lt;a href="http://www.microsoft.com/web/channel/products/WebPlatformInstaller.aspx" title="Microsoft Web Platform Installer"&gt;http://www.microsoft.com/web/channel/products/WebPlatformInstaller.aspx&lt;/a&gt;
&lt;br /&gt;Tale installer infatti, si preoccupa di installare:&lt;ul&gt;&lt;li&gt;IIS7&lt;/li&gt;&lt;li&gt;Visual Web Developer 2008&lt;/li&gt;&lt;li&gt;SQL Server 2008 Express&lt;/li&gt;&lt;li&gt;.NET Framework 3.5&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;configurando l'ambiente in maniera automatica.
&lt;br /&gt;Inoltre, lo sviluppatore è in grado di spuntare quali di questi tool e tecnologie ha intenzione di far installare, così da personalizzare l'installazione a proprio piacimento.
&lt;br /&gt;Ancora il prodotto è in versione beta, come dicevo. Ed è disponibile per queste piattaforme:&lt;ul&gt;&lt;li&gt;Windows Vista RTM&lt;/li&gt;&lt;li&gt;Windows Vista SP1&lt;/li&gt;&lt;li&gt;Windows Server 2008&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Per gli altri sistemi operativo, dovremmo aspettare (spero).
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Web Platform Installer.aspx" title="TAG: Web Platform Installer"&gt;Web Platform Installer&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/IIS 7.aspx" title="TAG: IIS 7"&gt;IIS 7&lt;/a&gt;][&lt;a href="http://www.peppedotnet.it/Tags/SQL Server 2008.aspx" title="TAG: SQL Server 2008"&gt;SQL Server 2008&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/MicrosoftWebPlatformInstaller.aspx#comm</comments><guid>/Blog/MicrosoftWebPlatformInstaller.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/339.aspx</trackback:ping></item><item><title>Autenticazione con Live ID</title><link>http://www.peppedotnet.it/Blog/WindowsLiveIDAuthentication.aspx</link><pubDate>Thu, 04 Sep 2008 09:26:05 GMT</pubDate><description>E' uscito ieri un mio nuovo articolo su &lt;a href="http://www.html.it" title="html.it"&gt;html.it&lt;/a&gt;. Questa volta l'argomento riguarda i servizi offerti da Windows Live ID, il meccanismo di autenticazione web proposto da Microsoft per integrare tutti i servizi della piattaforma Windows Live.
&lt;br /&gt;Attraverso la coppia "indirizzo e-mail"-"password" infatti, possiamo utilizzare sia applicazioni client come Windows Live Messenger, Live Mail e Live Writer, sia applicazioni Web come Hotmail, Live Space, SkyDrive e Photos. In questo modo solleviamo la nostra memoria dal peso di ricordare gli account per tutti questi servizi.
&lt;br /&gt;
&lt;br /&gt;Durante il corso dell'articolo si vedrà come è possibile utilizzare questo meccanismo all'interno delle proprie applicazioni web ASP.NET senza particolari sforzi, sfruttando quello che ci viene messo a disposizione da uno dei tre SDK relativi al servizio di autenticazione: il &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=24195B4E-6335-4844-A71D-7D395D20E67B&amp;displaylang=en" title="Web Authenticaion SDK"&gt;Web Authentication SDK&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;Vi lascio quindi il link diretto all'articolo:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2756/autenticazione-tramite-windows-live-id/" title="Autenticazione con Live ID"&gt;http://aspnet.html.it/articoli/leggi/2756/autenticazione-tramite-windows-live-id/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Per restare in argomento, vi segnalo anche lo speciale che ASPItalia ha fatto riguardo i servizi della piattaforma di Windows Live e su come questi possono essere integrati all'interno delle nostre applicazioni web e non.
&lt;br /&gt;Qua per lo speciale: &lt;a href="http://www.aspitalia.com/focuson/1036/Speciale-Windows-Live-Services-Integrarli-Applicazioni.aspx" title="Speciale Windows Live Services: come integrarli nelle proprie applicazioni"&gt;http://www.aspitalia.com/focuson/1036/Speciale-Windows-Live-Services-Integrarli-Applicazioni.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Windows Live.aspx" title="TAG: Windows Live"&gt;Windows Live&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Windows Live ID.aspx" title="TAG: Windows Live ID"&gt;Windows Live ID&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SOA.aspx" title="TAG: SOA"&gt;SOA&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/WindowsLiveIDAuthentication.aspx#comm</comments><guid>/Blog/WindowsLiveIDAuthentication.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/334.aspx</trackback:ping></item><item><title>Utilizzo dei parametri sulle query ad un database Access</title><link>http://www.peppedotnet.it/Blog/HowToUseParametersInMsAccessQuery.aspx</link><pubDate>Sat, 30 Aug 2008 19:15:46 GMT</pubDate><description>In questi giorni mi sono trovato a dover effettuare una query da una pagina ASP.NET ad un database Access (cosa che ormai non facevo da tanto, visto l'amore che ho verso SQL Server). Per rispettare le varie politiche di sicurezza riguardo gli attacchi di sql injection, mi accingo ad utilizzare la classe OleDbParamter per passare i parametri necessari alla mia query.
&lt;br /&gt;Nel mio caso avevo un singolo parametro di tipo "data e ora".
&lt;br /&gt;Questo il codice che avevo scritto:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;OleDbConnection conn = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbConnection(strConn);
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;using&lt;/span&gt; (conn)
&lt;br /&gt;{
&lt;br /&gt;    OleDbCommand cmd = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbCommand();
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;using&lt;/span&gt; (cmd)
&lt;br /&gt;    {
&lt;br /&gt;        cmd.Connection = conn;
&lt;br /&gt;        cmd.CommandText = &lt;span style="color: #A31515"&gt;"SELECT * FROM table WHERE campoData &gt; @dataeora"&lt;/span&gt;;
&lt;br /&gt;        OleDbParameter param = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbParameter(&lt;span style="color: #A31515"&gt;"@dataeora"&lt;/span&gt;, DateTime.Now);
&lt;br /&gt;        cmd.Parameters.Add(param);
&lt;br /&gt;
&lt;br /&gt;        conn.Open();
&lt;br /&gt;        OleDbDataReader reader = cmd.ExecuteReader();
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;while&lt;/span&gt; (reader.Read())
&lt;br /&gt;        {
&lt;br /&gt;            &lt;span style="color: #008200"&gt;//...&lt;/span&gt;
        }
&lt;br /&gt;        reader.Close();
&lt;br /&gt;    }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Bene... una volta eseguito questo codice, mi vedo stampare a video questa bellissima eccezione:
&lt;br /&gt;
&lt;br /&gt;&lt;div style="margin-left: 10px; color: red; font-style:italic"&gt;System.Data.OleDb.OleDbException: Data type mismatch in criteria expression&lt;/div&gt;
&lt;br /&gt;Dopo un pò di prove, mi sono accorto che Access vuole il parametro (anche se di tipo DateTime) sotto forma di stringa. Quindi mi è bastato aggiungere la chiamata al metodo ToString() e il mio errore è sparito.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;OleDbParameter param = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbParameter(&lt;span style="color: #A31515"&gt;"@dataeora"&lt;/span&gt;, DateTime.Now.ToString());&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;La cosa però non mi piaceva molto.. e googlando un pò, ho trovato una soluzione un pò più pulita. Basta infatti specificare prima della query, il numero e il tipo dei parametri che andranno utilizzati nella query stessa.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;OleDbConnection conn = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbConnection(strConn);
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;using&lt;/span&gt; (conn)
&lt;br /&gt;{
&lt;br /&gt;    OleDbCommand cmd = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbCommand();
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;using&lt;/span&gt; (cmd)
&lt;br /&gt;    {
&lt;br /&gt;        cmd.Connection = conn;
&lt;br /&gt;        cmd.CommandText = &lt;span style="color: #A31515"&gt;"PARAMETERS @dataeora datetime; "&lt;/span&gt; + 
&lt;br /&gt;                           &lt;span style="color: #A31515"&gt;"SELECT * FROM table WHERE campoData &gt; @dataeora"&lt;/span&gt;;
&lt;br /&gt;        OleDbParameter param = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbParameter(&lt;span style="color: #A31515"&gt;"@dataeora"&lt;/span&gt;, DateTime.Now);
&lt;br /&gt;        cmd.Parameters.Add(param);
&lt;br /&gt;
&lt;br /&gt;        &lt;span style="color: #008200"&gt;//...&lt;/span&gt;
    }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Buono a sapersi per le prossime volte.. no ?
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Access.aspx" title="TAG: Access"&gt;Access&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Parameter.aspx" title="TAG: Parameter"&gt;Parameter&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/HowToUseParametersInMsAccessQuery.aspx#comm</comments><guid>/Blog/HowToUseParametersInMsAccessQuery.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/333.aspx</trackback:ping></item><item><title>Come settare il testo di una TextBox con la propriet&#224; TextMode=&quot;Password&quot;</title><link>http://www.peppedotnet.it/Blog/HowToSetTextInTextBoxModePassword.aspx</link><pubDate>Sat, 09 Aug 2008 11:48:06 GMT</pubDate><description>Se provate a settare un valore alla proprietà Text di una semplice TextBox lato server, e questa ha la proprietà TextMode valorizzata su "Password", vi accorgerete che state eseguendo un'operazione che non verrà portata a termine correttamente dal runtime di ASP.NET; questo per semplici ragioni di sicurezza, in quanto tale valore (che dovrebbe essere un'informazione da proteggere) verrebbe renderizzato nel sorgente html della pagina assieme a tutto il resto dei controlli.
&lt;br /&gt;Per ovviare a questo comportamento standard di tutti i controlli di tipo TextBox, è possibile utlizzare l'attributo "value" del campo di testo:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;txt.Attributes.Add(&lt;span style="color: #A31515"&gt;"value"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"la mia password"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Così facendo, avremo il nostro valore settato correttamente all'interno della casella di testo.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/TextBox.aspx" title="TAG: TextBox"&gt;TextBox&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/HowToSetTextInTextBoxModePassword.aspx#comm</comments><guid>/Blog/HowToSetTextInTextBoxModePassword.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/330.aspx</trackback:ping></item><item><title>Fare il parsing di un URL per ricavarne i parametri di querystring</title><link>http://www.peppedotnet.it/Blog/HowToParseURLforQuerystringParameters.aspx</link><pubDate>Tue, 29 Jul 2008 18:41:26 GMT</pubDate><description>Oggi mi sono imbattuto in questo quesito. Come ottenere i valori dei parametri di querystirng da un'indirizzo (nel mio caso) prelevato dalla proprietà UrlReferref della richiesta corrente.
&lt;br /&gt;Per raggungere questo obbiettivo, ci viene in aiuto la classe &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx" title="Classe HttpUtility"&gt;HttpUtility&lt;/a&gt;, che espone il metodo &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httputility.parsequerystring.aspx" title="Metodo ParseQueryString"&gt;ParseQueryString&lt;/a&gt;. Tale metodo ritorna una collezione di tipo NameValueCollection con tutte le coppie chiave-valore rappresentati i vari parametri di querystring presenti nell'indirizzo che abbiamo dato in pasto al metodo stesso.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;NameValueCollection referrerQuerystring = HttpUtility.ParseQueryString(Request.UrlReferrer.Query);&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Chiaramente questa tecnica funziona con tutti i tipi di URL che passiamo come parametro al metodo ParseQueryString.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/HowToParseURLforQuerystringParameters.aspx#comm</comments><guid>/Blog/HowToParseURLforQuerystringParameters.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/328.aspx</trackback:ping></item><item><title>ASP.NET e Windows Live Search</title><link>http://www.peppedotnet.it/Blog/ASPNETWindowsLiveSearch.aspx</link><pubDate>Wed, 09 Jul 2008 19:40:40 GMT</pubDate><description>E' uscito oggi, sempre su &lt;a href="http://www.html.it" title="html.it"&gt;html.it&lt;/a&gt;, il mio articolo sull'integrazione dei servizi offerti dal motore di Windows Live Search in applicazioni ASP.NET personalizzate.
&lt;br /&gt;L'articolo è il primo di una serie sui servizi offerti dalla piattaforma di Windows Live. Vedremo infatti, in questa e nelle prossime puntate, quali sono gli SDK, le API e i Web Services offerti dalla piattaforma Microsoft che possono andare ad arricchire i nostri siti web.
&lt;br /&gt;
&lt;br /&gt;Questo il link all'articolo, completo di codice sorgente d'esempio.
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2711/ricerche-con-aspnet-e-live-search/" title="Ricerche con ASP.NET e Live Search"&gt;http://aspnet.html.it/articoli/leggi/2711/ricerche-con-aspnet-e-live-search/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Buona lettura !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Windows Live.aspx" title="TAG: Windows Live"&gt;Windows Live&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Live Search.aspx" title="TAG: Live Search"&gt;Live Search&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNETWindowsLiveSearch.aspx#comm</comments><guid>/Blog/ASPNETWindowsLiveSearch.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/327.aspx</trackback:ping></item><item><title>Utilizzo dell'attributo ValidationPropertyAttribute</title><link>http://www.peppedotnet.it/Blog/HowToUseValidationPropertyAttribute.aspx</link><pubDate>Sat, 31 May 2008 11:28:33 GMT</pubDate><description>Un pò di giorni fa mi sono imbatutto in un errore che no avevo mai visto. All'interno di una pagina asp.net avevo inserito un pò di web control di base (textbox, checkbox, ecc..) e un mio controllo custom. Volevo poi inserire dei validatori all'interno della pagina per controllare se questi controlli fossero correttamente valorizzati prima di un eventuale postback.
&lt;br /&gt;Eseguo la pagina e mi trovo questo errore:
&lt;br /&gt;
&lt;br /&gt;&lt;div style="margin-left: 10px; color: red; font-style: italic"&gt;Control '{0}' referenced by the ControlToValidate property of '{1}' cannot be validated.&lt;/div&gt;
&lt;br /&gt;In pratica cosa succedeva ? Il validatore legato al mio controllo custom (attraverso la proprietà ControlToValidate) non sapeva su che proprietà effettuare il controllo di validazione.
&lt;br /&gt;Per risolvere questo inconveniente ci viene in aiuto un attributo del .NET Framework da applicare a livello di classe, precisamente prima della dichiarazione della classe rappresentante il nostro controllo personalizzato. L'attributo in questione è il "ValidationPropertyAttribute" che segnala ad un eventuale controllo di tipo validator, su quale proprietà del mio controllo custom effettuare la validazione.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;[ValidationPropertyAttribute(&lt;span style="color: #A31515"&gt;"SelectedText"&lt;/span&gt;)]
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;class&lt;/span&gt; MyCustomControl : CompositeControl
&lt;br /&gt;{ ... }&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Nell'esempio, la validazione viene effettuata sulla proprietà "SelectedText".
&lt;br /&gt;Così facendo siamo in grado di creare dei controlli web personalizzati che possono essere vaidati dai controlli di validazione di base del .NET Framework.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Web Controls.aspx" title="TAG: Web Controls"&gt;Web Controls&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Validator.aspx" title="TAG: Validator"&gt;Validator&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/HowToUseValidationPropertyAttribute.aspx#comm</comments><guid>/Blog/HowToUseValidationPropertyAttribute.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/320.aspx</trackback:ping></item><item><title>Web services, WCF e... ASP.NET - Parte 2</title><link>http://www.peppedotnet.it/Blog/WebServicesWCFASPNET_Parte2.aspx</link><pubDate>Fri, 09 May 2008 23:53:37 GMT</pubDate><description>Dopo la &lt;a href="http://www.peppedotnet.it/Blog/WebServicesWCFASPNET.aspx" title="Web services, WCF e... ASP.NET"&gt;prima parte&lt;/a&gt; uscita mercoledì scorso, ecco la seconda parte del mio articolo su Windows Comunication Foundation.
&lt;br /&gt;In questa seconda parte si entra un pò più in dettaglio all'interno del codice che serve per andare a formare un semplice servizio WCF e di tutte le sezioni di configurazione, sia per quanto riguarda il servizio host che espone il servizio, sia per eventuali applicazioni client.
&lt;br /&gt;
&lt;br /&gt;Questo il link:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2610/web-services-wcf-e-aspnet/4/" title="Web services, WCF e... ASP.NET - Parte 2"&gt;http://aspnet.html.it/articoli/leggi/2610/web-services-wcf-e-aspnet/4/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/WCF.aspx" title="TAG: WCF"&gt;WCF&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SOA.aspx" title="TAG: SOA"&gt;SOA&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/WebServicesWCFASPNET_Parte2.aspx#comm</comments><guid>/Blog/WebServicesWCFASPNET_Parte2.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/316.aspx</trackback:ping></item><item><title>Web services, WCF e... ASP.NET</title><link>http://www.peppedotnet.it/Blog/WebServicesWCFASPNET.aspx</link><pubDate>Thu, 01 May 2008 11:04:06 GMT</pubDate><description>Lo so che oggi  ci si dovrebbe riposare... ma ieri non ho fatto in tempo a segnalarlo. E' uscita infatti la prima di due parti, di un mio nuovo articolo. Questa volta si parla di Windows Comunication Foundation. L'articolo è una panoramica iniziale sull'architettura su cui si base il framework di comunicazione Microsoft, passando dai concetti di base come endpoint, address, contract e binding fino ad arrivare ad un esempio di sviluppo di un semplice servizio WCF, esposto attraverso IIS.
&lt;br /&gt;Questo il link:
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2610/web-services-wcf-e-aspnet/" title="Web services, WCF e... ASP.NET"&gt;http://aspnet.html.it/articoli/leggi/2610/web-services-wcf-e-aspnet/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Buona lettura !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/WCF.aspx" title="TAG: WCF"&gt;WCF&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/SOA.aspx" title="TAG: SOA"&gt;SOA&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/WebServicesWCFASPNET.aspx#comm</comments><guid>/Blog/WebServicesWCFASPNET.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/314.aspx</trackback:ping></item><item><title>Design pattern per la costruzione di un DAL - parte 2</title><link>http://www.peppedotnet.it/Blog/DesignPatternPerIlDataAccessLayer2.aspx</link><pubDate>Thu, 17 Apr 2008 12:06:11 GMT</pubDate><description>Ieri è uscita la seconda parte del mio articolo su come costruire il livello di accesso ai dati per le proprie applicazioni ASP.NET basandosi sui più famosi pattern architetturali.
&lt;br /&gt;In questa seconda parte, verrà introdotto il pattern "Template Method" e verrà applicato per effettuare rapidamente il mapping delle informazioni prelevate da query di selezione dalla base di dati, sulle proprietà degli oggetti appartenenti al domain model della propria applicazione.
&lt;br /&gt;Questo il link della seconda parte:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2588/design-pattern-per-il-data-access-layer/5/" title="Design pattern per il Data Access Layer"&gt;http://aspnet.html.it/articoli/leggi/2588/design-pattern-per-il-data-access-layer/5/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Buona lettura.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/DAL.aspx" title="TAG: DAL"&gt;DAL&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Domain Model.aspx" title="TAG: Domain Model"&gt;Domain Model&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Design Pattern.aspx" title="TAG: Design Pattern"&gt;Design Pattern&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/DesignPatternPerIlDataAccessLayer2.aspx#comm</comments><guid>/Blog/DesignPatternPerIlDataAccessLayer2.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/313.aspx</trackback:ping></item><item><title>Come costruire un DAL per applicazioni ASP.NET</title><link>http://www.peppedotnet.it/Blog/HowToWriteDALforASPNET.aspx</link><pubDate>Wed, 09 Apr 2008 18:01:11 GMT</pubDate><description>Oggi su &lt;a href="http://www.html.it" title="html.it"&gt;html.it&lt;/a&gt;, è uscita la prima parte del mio articolo su come costruire i propri Data Access Layer (DAL) per applicazioni ASP.NET; il tutto basato sull'implementazione di due dei più noti pattern architetturali.
&lt;br /&gt;In dettaglio, per l'indipendenza dalla base di dati è stato utilizzato il pattern Abstract Factory, mentre per il mapping delle informazioni prelevate da selezioni dalla base di dati sugli oggetti del proprio Domain Model è stato utilizzato il pattern Template Method.
&lt;br /&gt;Questa seconda implementazione sarà visibile nella seconda parte dell'articolo (che sarà pubblicata mercoledì prossimo).
&lt;br /&gt;
&lt;br /&gt;Vi lascio il link:
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2588/design-pattern-per-il-data-access-layer/" title="Design pattern per il Data Access Layer"&gt;http://aspnet.html.it/articoli/leggi/2588/design-pattern-per-il-data-access-layer/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Buona lettura ;)
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Domain Model.aspx" title="TAG: Domain Model"&gt;Domain Model&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/DAL.aspx" title="TAG: DAL"&gt;DAL&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/HowToWriteDALforASPNET.aspx#comm</comments><guid>/Blog/HowToWriteDALforASPNET.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/310.aspx</trackback:ping></item><item><title>Request.ServerVariables[&quot;REMOTE_HOST&quot;]</title><link>http://www.peppedotnet.it/Blog/Request.ServerVariablesREMOTE_HOST.aspx</link><pubDate>Sun, 20 May 2007 18:32:50 GMT</pubDate><description>L'altro giorno, un mio amico (un vero rompip... :) mi ha chiesto come prelevare il nome del pc client che accede ad un sito ASP.NET inserito all'interno di una intranet.
&lt;br /&gt;Io aveva gia affrontato questo problema, ma mi ero scordato di bloggare.
&lt;br /&gt;Per prelevare questo tipo di informazione si utilizza la collection &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httprequest.servervariables.aspx" title="Collection ServerVariables"&gt;ServerVariables&lt;/a&gt; della classe &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httprequest.aspx" title="HttpRequest class"&gt;HttpRequest&lt;/a&gt;, e in particolare si legge il contenuto della variabile REMOTE_HOST. Questa contiene il nome dell'host che ha effettuato la richiesta.
&lt;br /&gt;
&lt;br /&gt;Bene, al mio amico però, ritornava sempre l'indirizzo IP e non il nome della macchina. Questo perchè ? Perchè il suo sito era sotto IIS 5, che non era configurato per effettuare un revers lookup sul DNS.
&lt;br /&gt;Questa pagina di supporto Microsoft, spiega come configurare iis per effettuare questo tipo di operazione.
&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/245574/" title="How To Configure REMOTE_HOST to Perform a Reverse DNS Lookup in IIS"&gt;http://support.microsoft.com/kb/245574/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/IIS.aspx" title="TAG: IIS"&gt;IIS&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/HttpRequest.aspx" title="TAG: HttpRequest"&gt;HttpRequest&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/Request.ServerVariablesREMOTE_HOST.aspx#comm</comments><guid>/Blog/Request.ServerVariablesREMOTE_HOST.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/231.aspx</trackback:ping></item><item><title>Gli HTTP Modules di ASP.NET</title><link>http://www.peppedotnet.it/Blog/ASPNETHttpModules.aspx</link><pubDate>Wed, 11 Apr 2007 15:35:25 GMT</pubDate><description>E' stato appena pubblicato il mio secondo articolo per HTML.it, sezione ASP.NET; questa volta si parla di HTTP Modules, in quanto ho cercato di rimanere in tema con il &lt;a href="http://aspnet.html.it/articoli/leggi/2207/gli-http-handler-di-aspnet/" title="Gli HTTP Handler di ASP.NET"&gt;precedente&lt;/a&gt;.
&lt;br /&gt;Questo il link:
&lt;br /&gt;http://aspnet.html.it/articoli/leggi/2211/gli-http-modules/
&lt;br /&gt;
&lt;br /&gt;Buona lettura !
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/HTTP Modules.aspx" title="TAG: HTTP Modules"&gt;HTTP Modules&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNETHttpModules.aspx#comm</comments><guid>/Blog/ASPNETHttpModules.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/221.aspx</trackback:ping></item><item><title>Gli HTTP Handler di ASP.NET</title><link>http://www.peppedotnet.it/Blog/ASPNETHTTPHandler.aspx</link><pubDate>Fri, 06 Apr 2007 10:05:06 GMT</pubDate><description>2 giorni fa, è stat pubblicato il mio primo articolo per HTML.IT !
&lt;br /&gt;L'argomento erano gli HTTP Handler di ASP.NET, argomento che mi è molto a cuore e conosco ormai bene. Spero sia venuto fuori un bel lavoro. Questo il link:
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://aspnet.html.it/articoli/leggi/2207/gli-http-handler-di-aspnet/" title="Gli HTTP Handler di ASP.NET"&gt;http://aspnet.html.it/articoli/leggi/2207/gli-http-handler-di-aspnet/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/HTTP Handler.aspx" title="TAG: HTTP Handler"&gt;HTTP Handler&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ASPNETHTTPHandler.aspx#comm</comments><guid>/Blog/ASPNETHTTPHandler.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/219.aspx</trackback:ping></item><item><title>Chiudere una Web Form al click di un bottone</title><link>http://www.peppedotnet.it/Blog/ClosingWebForm.aspx</link><pubDate>Mon, 07 Nov 2005 11:27:21 GMT</pubDate><description>Ecco un trucchetto semplice semplice per chiudere una web form tramite il click su un bottone. Questo risulta molto utile all'interno di finestre pop-up.
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;C#&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; btnClose_Click(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;    Response.Write(&lt;span style="color: #848284"&gt;"&lt;script&gt;window.close();&lt;/script&gt;"&lt;/span&gt;);
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;VB.NET&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;Public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Sub&lt;/span&gt; btnClose_Click(&lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Object&lt;/span&gt;, &lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; e &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; EventArgs) &lt;span style="color: #0000FF"&gt;Handles&lt;/span&gt; btnClose.Click
&lt;br /&gt;   Response.Write(&lt;span style="color: #848284"&gt;"&lt;script&gt;window.close();&lt;/script&gt;"&lt;/span&gt;)
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Sub&lt;/span&gt;
&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ClosingWebForm.aspx#comm</comments><guid>/Blog/ClosingWebForm.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/94.aspx</trackback:ping></item><item><title>Persisting  ViewState, resoconto</title><link>http://www.peppedotnet.it/Blog/ViewStateOutOfPage.aspx</link><pubDate>Sat, 15 Oct 2005 12:26:26 GMT</pubDate><description>Allora, dopo i due post di &lt;a href="http://www.peppedotnet.it/Blog/Aumento_prestazioni_tramite_viewstate.aspx" title="Aumento prestazioni tramite viewstate"&gt;introduzione della problematica&lt;/a&gt; e di &lt;a href="http://www.peppedotnet.it/Blog/Persisting_viewstate.aspx" title="Persisting ViewState"&gt;descrizione di tutte le possibili implementazioni&lt;/a&gt;, ecco la conclusione sull'argomento.
&lt;br /&gt;Abbiamo detto che per inserire il contenuto del ViewState al di fuori della pagina aspx abbiamo tre possibilità:&lt;ul&gt;&lt;li&gt;utilizzare il filesystem&lt;/li&gt;&lt;li&gt;utilizzare la sessione&lt;/li&gt;&lt;li&gt;utilizzare la cache della pagina&lt;/li&gt;&lt;/ul&gt;Ecco, per comodità ho creato una mia soluzione per poter decidere su ogni pagina il tipo di tecnica da utilizzare, potendo quindi scegliere modificando una variabile aggiunta a quelle delle classe Page, classe da cui ereditano tutte le pagine ASP.NET.
&lt;br /&gt;Mi sono quindi creato un'enumeration per darmi la possibilità di effettuare la scelta:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;namespace&lt;/span&gt; Peppe.Web.UI
&lt;br /&gt;{
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;enum&lt;/span&gt; ViewStateLocation
&lt;br /&gt;	{
&lt;br /&gt;		&lt;span style="color: #848284"&gt;///&lt;/span&gt;&lt;span style="color: #008200"&gt;&lt;span style="color: #848284"&gt;&lt;summary&gt;&lt;/span&gt;Leaves the viewstate ones its place.&lt;span style="color: #848284"&gt;&lt;/summary&gt;&lt;/span&gt;
&lt;/span&gt;
		Default,
&lt;br /&gt;		&lt;span style="color: #848284"&gt;///&lt;/span&gt;&lt;span style="color: #008200"&gt;&lt;span style="color: #848284"&gt;&lt;summary&gt;&lt;/span&gt;Sets view state saved on page cache.&lt;span style="color: #848284"&gt;&lt;/summary&gt;&lt;/span&gt;
&lt;/span&gt;
		Cache,
&lt;br /&gt;		&lt;span style="color: #848284"&gt;///&lt;/span&gt;&lt;span style="color: #008200"&gt;&lt;span style="color: #848284"&gt;&lt;summary&gt;&lt;/span&gt;Sets view state saved on session.&lt;span style="color: #848284"&gt;&lt;/summary&gt;&lt;/span&gt;
&lt;/span&gt;
		Session,
&lt;br /&gt;		&lt;span style="color: #848284"&gt;///&lt;/span&gt;&lt;span style="color: #008200"&gt;&lt;span style="color: #848284"&gt;&lt;summary&gt;&lt;/span&gt;Sets view state saved on filesystem.&lt;span style="color: #848284"&gt;&lt;/summary&gt;&lt;/span&gt;
&lt;/span&gt;
		FileSystem
&lt;br /&gt;	}
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;e sono andato a creare una nuova classe che erediti dalla classe Page.
&lt;br /&gt;A questa classe ho aggiunto la proprietà ViewStateLocation, per settare il tipo di tecnica da utilizzare per salvare il viewstate, e le proprietà ViewStateDirectory e ViewStateFilePath, utili per l'archiviazione del viewstate sul filesystem. Infine ho fatto l'overload dei metodi LoadPageStateFromPersistenceMedium e SavePageStateToPersistenceMedium e ci ho inserito dentro il codice necessario ad implementare tutte le tecniche descritte.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;override&lt;/span&gt; &lt;span style="color: #0000FF"&gt;object&lt;/span&gt; LoadPageStateFromPersistenceMedium()
&lt;br /&gt;{
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;(&lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.ViewStateLocation)
&lt;br /&gt;	{
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; ViewStateLocation.Cache:
&lt;br /&gt;		{
&lt;br /&gt;			LosFormatter formatter = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; LosFormatter();
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; str = Request.Form[&lt;span style="color: #848284"&gt;"__VIEWSTATE_KEY"&lt;/span&gt;];
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (!str.StartsWith(&lt;span style="color: #848284"&gt;"VIEWSTATE_"&lt;/span&gt;)) 
&lt;br /&gt;			{
&lt;br /&gt;				&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: #848284"&gt;"Invalid viewstate key:"&lt;/span&gt; + str);
&lt;br /&gt;			}
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; vs = Cache[str];
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;(vs != &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;				&lt;span style="color: #0000FF"&gt;return&lt;/span&gt; formatter.Deserialize(vs.ToString());
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;
&lt;br /&gt;				&lt;span style="color: #0000FF"&gt;return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;;
&lt;br /&gt;		}
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; ViewStateLocation.Session:
&lt;br /&gt;		{
&lt;br /&gt;			LosFormatter formatter = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; LosFormatter();
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; vs = Session[&lt;span style="color: #848284"&gt;"state"&lt;/span&gt;];
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (vs!=&lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;				&lt;span style="color: #0000FF"&gt;return&lt;/span&gt; formatter.Deserialize(vs.ToString());
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;
&lt;br /&gt;				&lt;span style="color: #0000FF"&gt;return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;;
&lt;br /&gt;		}
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; ViewStateLocation.FileSystem:
&lt;br /&gt;		{
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; vsString = Request.Form[ViewStateHiddenFieldName];
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;if&lt;/span&gt; (!File.Exists(vsString))
&lt;br /&gt;			&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: #848284"&gt;"The Viewstate file "&lt;/span&gt; + vsString + &lt;span style="color: #848284"&gt;" is missing."&lt;/span&gt;);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;
&lt;br /&gt;			{
&lt;br /&gt;				LosFormatter formatter = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; LosFormatter();
&lt;br /&gt;				StreamReader sr = File.OpenText(vsString);
&lt;br /&gt;				&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; viewStateString = sr.ReadToEnd();
&lt;br /&gt;				sr.Close();
&lt;br /&gt;				&lt;span style="color: #0000FF"&gt;return&lt;/span&gt; formatter.Deserialize(viewStateString);
&lt;br /&gt;			}
&lt;br /&gt;		}
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;default&lt;/span&gt;:
&lt;br /&gt;		{
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;base&lt;/span&gt;.LoadPageStateFromPersistenceMedium();
&lt;br /&gt;		}
&lt;br /&gt;	}
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;override&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; SavePageStateToPersistenceMedium(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; viewState)
&lt;br /&gt;{
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;(&lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.ViewStateLocation)
&lt;br /&gt;	{
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; ViewStateLocation.Cache:
&lt;br /&gt;		{
&lt;br /&gt;			LosFormatter formatter = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; LosFormatter();
&lt;br /&gt;			StringWriter writer = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; StringWriter();
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; str = &lt;span style="color: #848284"&gt;"VIEWSTATE_"&lt;/span&gt; + Request.UserHostAddress + &lt;span style="color: #848284"&gt;"_"&lt;/span&gt;
&lt;br /&gt;						+ DateTime.Now.Ticks.ToString();
&lt;br /&gt;			formatter.Serialize(writer, viewState);
&lt;br /&gt;			Cache.Add(str, writer.ToString(), &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;,
&lt;br /&gt;			DateTime.Now.AddMinutes(Session.Timeout),TimeSpan.Zero,
&lt;br /&gt;			CacheItemPriority.Default, &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;);
&lt;br /&gt;			writer.Close();
&lt;br /&gt;			RegisterHiddenField(&lt;span style="color: #848284"&gt;"__VIEWSTATE_KEY"&lt;/span&gt;, str);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		}
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; ViewStateLocation.Session:
&lt;br /&gt;		{
&lt;br /&gt;			StringWriter writer = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; StringWriter();
&lt;br /&gt;			LosFormatter formatter = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; LosFormatter();
&lt;br /&gt;			formatter.Serialize(writer, viewState);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; state = writer.ToString();
&lt;br /&gt;			writer.Close();
&lt;br /&gt;			Session[&lt;span style="color: #848284"&gt;"state"&lt;/span&gt;] = state;
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		}
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; ViewStateLocation.FileSystem:
&lt;br /&gt;		{
&lt;br /&gt;			LosFormatter formatter = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; LosFormatter();
&lt;br /&gt;			StringWriter writer = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; StringWriter();
&lt;br /&gt;			formatter.Serialize(writer, viewState);
&lt;br /&gt;			StreamWriter sw = File.CreateText(&lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.ViewStateFilePath);
&lt;br /&gt;			sw.Write(writer.ToString());
&lt;br /&gt;			sw.Close();
&lt;br /&gt;			writer.Close();
&lt;br /&gt;			Page.RegisterHiddenField(ViewStateHiddenFieldName, ViewStateFilePath);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		}
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;default&lt;/span&gt;:
&lt;br /&gt;		{
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;base&lt;/span&gt;.SavePageStateToPersistenceMedium(viewState);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		}
&lt;br /&gt;	}
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Fatto questo, non resta altro che ereditare le nostre classi di code-behind delle nostre pagine .aspx, dalla classe che abbiamo appena definito e non dalla classe Page, e assegnare un valore alla variabile ViewStateLocation.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;class&lt;/span&gt; myASPXpage : Peppe.Web.UI.Page
&lt;br /&gt;{
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, System.EventArgs e)
&lt;br /&gt;	{
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.ViewStateLocation = Peppe.Web.UI.ViewStateLocation.Session;
&lt;br /&gt;	}
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;E con questo post chiudo l'argomento :)</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ViewStateOutOfPage.aspx#comm</comments><guid>/Blog/ViewStateOutOfPage.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/82.aspx</trackback:ping></item><item><title>Persisting viewstate</title><link>http://www.peppedotnet.it/Blog/Persisting_viewstate.aspx</link><pubDate>Thu, 25 Aug 2005 14:58:48 GMT</pubDate><description>Nel precedente post riguardante il viewstate, &lt;a href="http://www.peppedotnet.it/Blog/Aumento_prestazioni_tramite_viewstate.aspx#comm" title="Commento di Lorenzo"&gt;mi è stato chiesto da Lorenzo&lt;/a&gt; se fosse conveniente salvare il viewstate sul filesystem come proposto da &lt;a href="http://scottonwriting.net/sowblog/" title="Scott Mitchell"&gt;Scott Mitchell&lt;/a&gt;.
&lt;br /&gt;Come prima risposta mi è venuto in mente che forse era una tecnica un pò dispendiosa, pensando ad un operazione di I/O ad ogni accesso alla pagina.
&lt;br /&gt;Poi, spinto dalla curiosità, mi sono documentato un pochino di più. E mi sono letto questi articoli sull'argomento:
&lt;br /&gt;
&lt;br /&gt;- &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/viewstate.asp" title="Understanding ASP.NET View State"&gt;Understanding ASP.NET View State&lt;/a&gt; di Scott Micthell
&lt;br /&gt;- &lt;a href="http://msdn.microsoft.com/msdnmag/issues/03/02/CuttingEdge/" title="The ASP.NET View State"&gt;The ASP.NET View State&lt;/a&gt; di Dino Esposito
&lt;br /&gt;- &lt;a href="http://aspalliance.com/472" title="Persisting View State to the File System"&gt;Persisting View State to the File System&lt;/a&gt; di Justin Lovell
&lt;br /&gt;
&lt;br /&gt;La tecnica descritta è sempre la stessa. Cioè quella di crearsi una propria classe che erediti dalla classe Page e riscrivere i metodi &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIPageClassLoadPageStateFromPersistenceMediumTopic.asp" title="LoadPageStateFromPersistenceMedium()"&gt;LoadPageStateFromPersistenceMedium()&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIPageClassSavePageStateToPersistenceMediumTopic.asp" title="SavePageStateToPersistenceMedium(object viewState)"&gt;SavePageStateToPersistenceMedium(object viewState)&lt;/a&gt; inserendo il codice per serializzare il viewstate e creare un nuovo file sul server, tramite le classi del namespace System.IO (il nome del file risultante, conterrà il session ID della richiesta).
&lt;br /&gt;Una volta creata la classe, tutte le pagine dell'applicazione dovranno ereditare da questa ...
&lt;br /&gt;
&lt;br /&gt;&lt;% @Page Language="C#" Inherits="Peppe.MyNewPage" %&gt;
&lt;br /&gt;
&lt;br /&gt;Ora che è tutto più chiaro, devo dire che la tecnica mi piace molto.
&lt;br /&gt;Inoltre ho trovato anche chi dice di &lt;a href="http://dotnet.org.za/armand/archive/2004/11/11/6348.aspx" title="salvare il viewstate all'intero della sessione"&gt;salvare il viewstate all'intero della sessione&lt;/a&gt;, o &lt;a href="http://www.eggheadcafe.com/articles/20040613.asp" title="Salvare il viewstate all'interno della cache"&gt;all'interno della cache&lt;/a&gt;.
&lt;br /&gt;Avevo pensato di fare delle prove, ma &lt;a href="http://www.eggheadcafe.com/articles/20040613.asp" title="Prove viewstate"&gt;c'è chi le ha gia fatte per me&lt;/a&gt;.
&lt;br /&gt;E indovinate chi ha vinto ?
&lt;br /&gt;La signora &lt;b&gt;cache&lt;/b&gt;, con 169 richieste al secondo.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/Persisting_viewstate.aspx#comm</comments><guid>/Blog/Persisting_viewstate.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/61.aspx</trackback:ping></item><item><title>Aumentare le prestazioni di un sito web utilizzando al meglio il ViewState</title><link>http://www.peppedotnet.it/Blog/Aumento_prestazioni_tramite_viewstate.aspx</link><pubDate>Sat, 23 Jul 2005 19:32:34 GMT</pubDate><description>Il ViewState è un oggetto molto importante per chi sviluppa applicazioni web ASP.NET; esso infatti tiene traccia, con una stringa codificata di caratteri, dello stato della pagina dopo la sua ultima elaborazione lato server (per esempio dopo un postback), in modo tale da permettere allo sviluppatore di utilizzare delle proprietà dei web controls presenti nella pagina, prima che la pagina stessa sia inviata nuovamente al server.
&lt;br /&gt;La stringa di caratteri codificata, viene inserita in ogni pagina, all'interno di un campo hidden (nascosto), pronta ad essere decodificata e rielaborata una volta effettuato un postback.
&lt;br /&gt;Il campo hidden è stato chiamato __VIEWSTATE, e ha questa forma:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;input&lt;/span&gt;&lt;span style='color:#FF0000'&gt; type&lt;span style='color:#0000FF'&gt;="hidden"&lt;/span&gt; name&lt;span style='color:#0000FF'&gt;="__VIEWSTATE"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="dDw4OTE1NzQzMjt0PDtsPGk8M ..."&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Capirete che in pagine con parecchi web controls, la stringa rappresentante il viewstate inizierà ad avere una certa lunghezza, andando cosi' ad influire pesantemente nelle prestazioni della pagina.
&lt;br /&gt;E' buon uso quindi cercare di utilizzare il ViewState solamente nella pagine web in cui ne abbiamo effettivamente il bisogno.
&lt;br /&gt;Il ViewSate, di default, è abilitato in ogni pagina, ma è possibile disabilitarlo o includendo l'attributo EnableViewState="false" nella direttiva @Page della pagina scelta
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="background-color: yellow"&gt;&lt;%@ Page language="c#" Codebehind="prova.aspx.cs"&lt;br /&gt;AutoEventWireup="false" Inherits="Peppe.prova" EnableViewState="false" %&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;oppure è possibile decidere di togliere il viewstate da tutte le pagine della propria applicazione web, inserendo nel web.config
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;pages&lt;/span&gt;&lt;span style='color:#FF0000'&gt; buffer&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;
&lt;br /&gt;       enableSessionState&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;
&lt;br /&gt;       enableViewState&lt;span style='color:#0000FF'&gt;="false"&lt;/span&gt; 
&lt;br /&gt;       enableViewStatMac&lt;span style='color:#0000FF'&gt;="false"&lt;/span&gt; 
&lt;br /&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Inoltre, se per esempio avete una pagina dove utilizzate in concreto il ViewState, e dove sono presenti altri web controls che invece non ne hanno bisogno, basterà disabilitare l'uso del ViewState solamente per quei singoli controlli, dando il valore True alla proprietà EnableViewState.
&lt;br /&gt;
&lt;br /&gt;Una volta presi tutti questi accorgimenti, controllate pure il peso della pagina con il viewstate e senza, per verificarne il reale abbassamento, ed un successivo aumento delle prestazioni.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/Aumento_prestazioni_tramite_viewstate.aspx#comm</comments><guid>/Blog/Aumento_prestazioni_tramite_viewstate.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/56.aspx</trackback:ping></item><item><title>RepeaterPlus, updates</title><link>http://www.peppedotnet.it/Blog/RepeaterPlus_updates.aspx</link><pubDate>Sun, 10 Jul 2005 13:06:34 GMT</pubDate><description>Oggi ho inserito gli aggiornamenti fatti al mio &lt;a href="http://www.peppedotnet.it/RepeaterPlus" title="RepeaterPlus"&gt;RepeaterPlus&lt;/a&gt;.
&lt;br /&gt;Ho aggiunto una nuova enum che permette di scegliere tra tre modi di visualizzazione del paginatore:&lt;ul&gt;&lt;li&gt;Solo i link "next/prev"&lt;/li&gt;&lt;li&gt;Solo i link ai numeri di pagina&lt;/li&gt;&lt;li&gt;Sia i link "next/prev" che ai numeri di pagina&lt;/li&gt;&lt;/ul&gt;L'opzione di defualt è la prima, quindi solo i link "next/prev", mentre per specificarne delle altre, bisogna settare il valore della proprietà PagerMode del RepeaterPlus.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;cc1:RepeaterPlus&lt;/span&gt;&lt;span style='color:#FF0000'&gt; id&lt;span style='color:#0000FF'&gt;="rep"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;
&lt;br /&gt;                           AllowPaging&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;
&lt;br /&gt;                           RecordPerPage&lt;span style='color:#0000FF'&gt;="2"&lt;/span&gt;
&lt;br /&gt;                           PagingParameterName&lt;span style='color:#0000FF'&gt;="page"&lt;/span&gt;
&lt;br /&gt;                           PaginationPosition&lt;span style='color:#0000FF'&gt;="Bottom"&lt;/span&gt;
&lt;br /&gt;                           PagerMode&lt;span style='color:#0000FF'&gt;="NextPrevNumbers"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;ItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;%#&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Container.DataItem %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt; &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;ItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;EmptyTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;Non ci sono record&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;EmptyTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;cc1:RepeaterPlus&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Mi sono anche accorto che manca la gestione di eventuali altri parametri passati come querystring. Sto pensando il modo più veloce e ottimale per risolvere la cosa. Perchè chiaramente, se ho una pagina del tipo search.aspx?key=peppe, il valore della variabile "key" mi deve essere mantenuto tra la pagine della paginazione, e quindi i link del paginatore dovrebbero essere tutti del tipo: search.aspx?key=peppe&amp;page=1.
&lt;br /&gt;Sarà la prossima mancanza cui cercherò di rimediare.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/RepeaterPlus_updates.aspx#comm</comments><guid>/Blog/RepeaterPlus_updates.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/50.aspx</trackback:ping></item><item><title>Caching di dati. Alziamo le performance del nostro sito</title><link>http://www.peppedotnet.it/Blog/Caching_di_dati.aspx</link><pubDate>Sun, 03 Jul 2005 17:09:39 GMT</pubDate><description>In un sito con pagine che effettuano varie operazioni ogni volta che vengono caricate, soprattutto operazioni di accesso ai dati su di un database, è molto utile applicare un certo tipo di politiche di caching dei dati, in modo tale da aumentare le prestazioni di ogni pagina del sito.
&lt;br /&gt;Il .NET Framework ci permette di accedere alla cache di ogni pagina tramite l'oggetto Cache del namespace System.Web.Caching; questo oggetto può essere sfruttato come contenitore dei dati che vengono richiesti dalla pagina per un certo periodo di tempo.
&lt;br /&gt;Vediamo un esempio di utilizzo della cache di una pagina per salvare i risultati di una query ed evitare (per un periodo di tempo ben preciso) che la base di dati sia accessa ad ogni richiesta della pagina.
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;C#&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; System.Web.UI.WebControls.Repeater rep;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; OleDbConnection conn = &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; OleDbCommand cmd = &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;     DataTable dt = (DataTable)&lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.Cache.Get(&lt;span style="color: #848284"&gt;"LinksDataTable"&lt;/span&gt;);
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;if&lt;/span&gt;(dt == &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;)
&lt;br /&gt;     {
&lt;br /&gt;          &lt;span style="color: #008200"&gt;//Se quell'oggetto non è presente in cache
&lt;/span&gt;
          &lt;span style="color: #008200"&gt;//faccio la richiesta al database
&lt;/span&gt;
          &lt;span style="color: #0000FF"&gt;using&lt;/span&gt;(conn = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbConnection(&lt;span style="color: #848284"&gt;"stringa di connessione ..."&lt;/span&gt;);
&lt;br /&gt;          {
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;using&lt;/span&gt;(cmd = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbCommand(&lt;span style="color: #848284"&gt;"SELECT * FROM Links"&lt;/span&gt;, conn);
&lt;br /&gt;               {
&lt;br /&gt;                    OleDbDataAdapter adapter = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; OleDbDataAdapter(cmd);
&lt;br /&gt;                    DataSet ds = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; DataSet();
&lt;br /&gt;                    adapter.Fill(ds, &lt;span style="color: #848284"&gt;"Links"&lt;/span&gt;);
&lt;br /&gt;                    dt = ds.Tables[&lt;span style="color: #848284"&gt;"Links"&lt;/span&gt;];
&lt;br /&gt;                    &lt;span style="color: #008200"&gt;//Aggiungo la DataTable creata alla cache della pagina
&lt;/span&gt;
                    &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.Cache.Insert(&lt;span style="color: #848284"&gt;"LinksDataTable"&lt;/span&gt;, dt);
&lt;br /&gt;
&lt;br /&gt;                    &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.rep.DataSource = dt;
&lt;br /&gt;                    &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.rep.DataBind();
&lt;br /&gt;               }
&lt;br /&gt;          }
&lt;br /&gt;     }
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;else&lt;/span&gt;
&lt;br /&gt;     {
&lt;br /&gt;          &lt;span style="color: #008200"&gt;//Se quell'oggetto è presente il cache
&lt;/span&gt;
          &lt;span style="color: #008200"&gt;//stampo i dati
&lt;/span&gt;
          &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.rep.DataSource = dt;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.rep.DataBind();
&lt;br /&gt;     }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;VB.NET&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;Protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;WithEvents&lt;/span&gt; rep &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; System.Web.UI.WebControls.Repeater
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;Private&lt;/span&gt; conn &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; OleDbConnection
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;Private&lt;/span&gt; cmd &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; OleDbCommand
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;Public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Sub&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Object&lt;/span&gt;, &lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; e &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; EventArgs) &lt;span style="color: #0000FF"&gt;Handles&lt;/span&gt; &lt;span style="color: #0000FF"&gt;MyBase&lt;/span&gt;.Load
&lt;br /&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; dt &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; DataTable = &lt;span style="color: #0000FF"&gt;CType&lt;/span&gt;(this.Cache.&lt;span style="color: #0000FF"&gt;Get&lt;/span&gt;(&lt;span style="color: #848284"&gt;"LinksDataTable"&lt;/span&gt;), DataTable);
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;If&lt;/span&gt; dt &lt;span style="color: #0000FF"&gt;Is&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Nothing&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;          &lt;span style="color: #008200"&gt;'Se quell'oggetto non è presente in cache
&lt;/span&gt;
          &lt;span style="color: #008200"&gt;'faccio la richiesta al database
&lt;/span&gt;
          &lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; conn &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;New&lt;/span&gt; OleDbConnection(&lt;span style="color: #848284"&gt;"stringa di connessione ..."&lt;/span&gt;)
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; cmd &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;New&lt;/span&gt; OleDbCommand(&lt;span style="color: #848284"&gt;"SELECT * FROM Links"&lt;/span&gt;, conn)
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; adapter &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;New&lt;/span&gt; OleDbDataAdapter(cmd)
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; ds &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;New&lt;/span&gt; DataSet()
&lt;br /&gt;          adapter.Fill(ds, &lt;span style="color: #848284"&gt;"Links"&lt;/span&gt;)
&lt;br /&gt;          dt = ds.Tables(&lt;span style="color: #848284"&gt;"Links"&lt;/span&gt;)
&lt;br /&gt;          &lt;span style="color: #008200"&gt;'Aggiungo la DataTable creata alla cache della pagina
&lt;/span&gt;
          &lt;span style="color: #0000FF"&gt;Me&lt;/span&gt;.Cache.Insert(&lt;span style="color: #848284"&gt;"LinksDataTable"&lt;/span&gt;, dt);
&lt;br /&gt;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Me&lt;/span&gt;.rep.DataSource = dt;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Me&lt;/span&gt;.rep.DataBind();
&lt;br /&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Else&lt;/span&gt;
&lt;br /&gt;          &lt;span style="color: #008200"&gt;'Se quell'oggetto è presente il cache stampo i dati
&lt;/span&gt;
          &lt;span style="color: #0000FF"&gt;Me&lt;/span&gt;.rep.DataSource = dt
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Me&lt;/span&gt;.rep.DataBind()
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;If&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;La durata della cache di ogni pagina può essere definita in due modi, o tramite la direttiva @OutputCache da inserire subito dopo la direttiva @Page della pagina in questione
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="background-color: yellow"&gt;&lt;%@ OutputCache Duration="60" VaryByParam="*" %&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;oppure tramite l'aggiunta di una nuova sezione nel file web.config dell'applicazione web
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;configuration&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;     &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;configSections&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;          &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;section&lt;/span&gt;&lt;span style='color:#FF0000'&gt; name&lt;span style='color:#0000FF'&gt;="CacheSettings"&lt;/span&gt; 
&lt;br /&gt;                   type&lt;span style='color:#0000FF'&gt;="System.Configuration.NameValueFileSectionHandler, System, 
&lt;br /&gt;                   Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;/span&gt; 
&lt;br /&gt;          &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;     &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;configSections&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;     &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;CacheSettings&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;          &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; key&lt;span style='color:#0000FF'&gt;="EnableCaching"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;          &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; key&lt;span style='color:#0000FF'&gt;="RequireKeyDefinitionInConfig"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;          &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; key&lt;span style='color:#0000FF'&gt;="DefaultCacheDurationUnits"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="seconds"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;          &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;add&lt;/span&gt;&lt;span style='color:#FF0000'&gt; key&lt;span style='color:#0000FF'&gt;="DefaultCacheDurationValue"&lt;/span&gt; value&lt;span style='color:#0000FF'&gt;="60"&lt;/span&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;     &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;CacheSettings&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;configuration&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;che ci permette di specificare parametri per la cache di tutte le pagine del sito, oppure anche per ogni singolo oggetto che pensiamo di inserirci.
&lt;br /&gt;Io ho utilizzato questa tecnica in molte delle pagine e dei server control presenti in questo sito e devo dire che le prestazioni delle richieste di ogni pagina sono davvero migliorate.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/Caching_di_dati.aspx#comm</comments><guid>/Blog/Caching_di_dati.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/44.aspx</trackback:ping></item><item><title>RepeaterPlus v0.7</title><link>http://www.peppedotnet.it/Blog/RepeaterPlus_v07.aspx</link><pubDate>Fri, 24 Jun 2005 15:59:54 GMT</pubDate><description>Oggi, giusto per riprendermi dal mancamento di ieri (qui a Milano ci si scioglie), ho messo on-line un server control che ho implementato per facilitarmi un pochino la vita. L'ho chiamato "RepeaterPlus", proprio perchè estende le funzionalità base del web control Repeater di ASP.NET, aggiungendoci la paginazione. Lo potete trovare sotto la sezione &lt;a href="http://www.peppedotnet.it/projects.aspx" title="Sezione Projects"&gt;"Projects"&lt;/a&gt;, ma vi lascio cmq il link
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://www.peppedotnet.it/RepeaterPlus/" title="RepeaterPlus"&gt;http://www.peppedotnet.it/RepeaterPlus&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;Ho scelto questo tipo di approccio, perchè credo nelle potenzialità del repeater (al posto dei vari DataGrid e DataList), suprattutto per quanto riguarda l'output, che è totalmente personalizzabile da parte dello sviluppatore.
&lt;br /&gt;Per adesso il control non fa nient'altro che paginare i record inseriti come data source secondo un numero, scelto dall'utente, di record per pagina. Inoltre è possibile personalizzare il parametro di querystring utile ad indentificare il numero di pagina corrente e decidere se mettere la paginazione prima o dopo la visualizzazione dei record.
&lt;br /&gt;Ho messo anche vari esempi di codice sia in VB.NET che in C#, ed eccone qui uno:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style='background-color: yellow'&gt;&lt;%@ Register TagPrefix="cc1" Namespace="Peppe.UI.WebControls" Assembly="Peppe.UI.WebControls" %&gt;&lt;/span&gt;
&lt;br /&gt;...
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;cc1:RepeaterPlus&lt;/span&gt;&lt;span style='color:#FF0000'&gt; id&lt;span style='color:#0000FF'&gt;="rep"&lt;/span&gt; runat&lt;span style='color:#0000FF'&gt;="server"&lt;/span&gt;
&lt;br /&gt;                             AllowPaging&lt;span style='color:#0000FF'&gt;="true"&lt;/span&gt;
&lt;br /&gt;                             RecordPerPage&lt;span style='color:#0000FF'&gt;="2"&lt;/span&gt;
&lt;br /&gt;                             PagingParameterName&lt;span style='color:#0000FF'&gt;="page"&lt;/span&gt;
&lt;br /&gt;                             PaginationPosition&lt;span style='color:#0000FF'&gt;="Bottom"&lt;/span&gt;&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;ItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;        &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;%#&lt;/span&gt;&lt;span style='color:#FF0000'&gt; Container.DataItem %&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt; &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;br&lt;/span&gt;&lt;span style='color:#FF0000'&gt; &lt;/span&gt;&lt;span style='color:#0000FF'&gt;/&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;ItemTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;    &lt;span style='color:#0000FF'&gt;&lt;&lt;/span&gt;&lt;span style='color:#800000'&gt;EmptyTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;Non ci sono record&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;EmptyTemplate&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style='color:#0000FF'&gt;&lt;/&lt;/span&gt;&lt;span style='color:#800000'&gt;cc1:RepeaterPlus&lt;/span&gt;&lt;span style='color:#0000FF'&gt;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;e nel code-behind:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; Peppe.UI.WebControls.RepeaterPlus rep;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, System.EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;    ArrayList lista = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; ArrayList();
&lt;br /&gt;    lista.Add(&lt;span style="color: #848284"&gt;"uno"&lt;/span&gt;);
&lt;br /&gt;    lista.Add(&lt;span style="color: #848284"&gt;"due"&lt;/span&gt;);
&lt;br /&gt;    lista.Add(&lt;span style="color: #848284"&gt;"tre"&lt;/span&gt;);
&lt;br /&gt;
&lt;br /&gt;    rep.DataSource = lista;
&lt;br /&gt;    rep.DataBind();
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;RepeaterPlus supporta qualsiasi tipo di data source che implementi l'interfaccia IEnumerable, ed è stato testato con successo con DataTable, DataView, DataSet ed ArrayList (i test sono disponibili nel &lt;a href="http://www.peppedotnet.it/RepeaterPlus/RepeaterPlus_Esempi.zip" title="RepeaterPlus - esempi"&gt;file degli esempi&lt;/a&gt;).
&lt;br /&gt;Ho inoltre aggiungo un nuovo "template" (chiamato EmptyTemplate) utile a documentare il fatto che il data source legato al repeater, non ha record, o che non è stato asssociato alcun datasource al control. Questa tecnica l'ho appresa da &lt;a href="http://www.aspitalia.com/liste/usag/script.aspx?ID=681" title="Articolo di Daniele Bochicchio"&gt;questo articolo&lt;/a&gt; di Daniele Bochicchio di &lt;a href="http://www.aspitalia.com" title="ASPItalia.com"&gt;ASPItalia.com&lt;/a&gt;.
&lt;br /&gt;Le prossime features che vorrei aggiungere sono:&lt;ul&gt;&lt;li&gt;inserire il supporto per l'intellisense e il design di Visual Studio.NET&lt;/li&gt;&lt;li&gt;modificare la paginazione di molti record, e metterla di 10 in 10&lt;/li&gt;&lt;li&gt;aggiungere più tipi di paginazione (Es: solo numeri, next/prev, numeri e next/prev)&lt;/li&gt;&lt;li&gt;aggiungere funzionalità di sorting&lt;/li&gt;&lt;/ul&gt;Chiaramente se qualcuno ha suggerimenti, segnalazione di bug, critiche, se vuole partecipare al progetto o se ha intenzione di utilizzare il control nel proprio sito, &lt;a href="mailto:info[at]peppedotnet.it" title="Scrivimi"&gt;la mia mail è sempre la stessa&lt;/a&gt; !
&lt;br /&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/RepeaterPlus_v07.aspx#comm</comments><guid>/Blog/RepeaterPlus_v07.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/39.aspx</trackback:ping></item><item><title>Creare password alfanumeriche</title><link>http://www.peppedotnet.it/Blog/Creare_password_alfanumeriche.aspx</link><pubDate>Fri, 26 Nov 2004 12:42:37 GMT</pubDate><description>Sul forum di &lt;a href="http://www.devspy.com/Forum" title="Forum di DevSpy.com"&gt;DevSpy.com&lt;/a&gt;, è stato chiesto come poter creare delle password alfanumeriche da 12 caratteri presi a caso.
&lt;br /&gt;Ciò risulta molto semplice, utilizzando la classe System.Random:
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;private string password, pass;
&lt;br /&gt;private int n, l, c;
&lt;br /&gt;
&lt;br /&gt;public string generatePassword()
&lt;br /&gt;{
&lt;br /&gt;    Random casoNumeri = new Random();
&lt;br /&gt;    Random casoLettere = new Random();
&lt;br /&gt;    Random caso = new Random();
&lt;br /&gt;    string[] alfabeto = {"a","b","c","d","e","f",
&lt;br /&gt;                        "g","h","i","l","m","n",
&lt;br /&gt;                        "o","p","q","r","s","t",
&lt;br /&gt;                        "u","v","w","z"};
&lt;br /&gt;    for(int i=0; i&lt;6; i++)
&lt;br /&gt;    {
&lt;br /&gt;        n = casoNumeri.Next(0,9);
&lt;br /&gt;        l = casoLettere.Next(0,22);
&lt;br /&gt;        pass += n.ToString()+alfabeto[l];
&lt;br /&gt;    }
&lt;br /&gt;    char[] letters = pass.ToCharArray();
&lt;br /&gt;    for(int g=0; g&lt;letters.Length; g++)
&lt;br /&gt;    {
&lt;br /&gt;        c = caso.Next(0,9);
&lt;br /&gt;        password += letters[c].ToString();
&lt;br /&gt;    }
&lt;br /&gt;    return password;
&lt;br /&gt;}&lt;/code&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/Creare_password_alfanumeriche.aspx#comm</comments><guid>/Blog/Creare_password_alfanumeriche.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/13.aspx</trackback:ping></item><item><title>DirectoryInfo</title><link>http://www.peppedotnet.it/Blog/DirectoryInfo.aspx</link><pubDate>Tue, 16 Nov 2004 00:53:28 GMT</pubDate><description>Vediamo un modo molto utile per ottenere delle informazioni sulle cartelle di nostro interesse. In questo caso stampiamo a video tutte le directory e i files presenti nella cartella della directory virtuale dove verrà posizionata la WebForm ASP.NET contenente questi due metodi:
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;public void page_Load(object sender, EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;    this.getDirectoryInfo(Server.MapPath("/"));
&lt;br /&gt;}
&lt;br /&gt;
&lt;br /&gt;public void getDirectoryInfo(string path)
&lt;br /&gt;{
&lt;br /&gt;    DirectoryInfo dirInfo = new DirectoryInfo(path);
&lt;br /&gt;    DirectoryInfo[] cartelle = dirInfo.GetDirectories();
&lt;br /&gt;    lbl.Text = "&lt;b&gt;Cartelle:&lt;/b&gt;&lt;br /&gt;";
&lt;br /&gt;    foreach(DirectoryInfo cartella in cartelle)
&lt;br /&gt;    {
&lt;br /&gt;        lbl.Text += cartella.Name+"&lt;br /&gt;";
&lt;br /&gt;    }
&lt;br /&gt;    lbl.Text += "&lt;b&gt;Files:&lt;/b&gt;&lt;br /&gt;";
&lt;br /&gt;    FileInfo[] files = dirInfo.GetFiles();
&lt;br /&gt;    foreach(FileInfo file in files)
&lt;br /&gt;    {
&lt;br /&gt;        lbl.Text += file.Name+"&lt;br /&gt;";
&lt;br /&gt;    }
&lt;br /&gt;}&lt;/code&gt;
&lt;br /&gt;Inoltre possiamo ottenere tante altre proprietà riguardante la nostra cartella, come ad esempio la data di creazione (dirInfo.CreationTime), la data dell'ultimo accesso (dirInfo.LastAccessTime), la data di ultima scrittura (dirInfo.LastWriteTime) o la sua root (dirInfo.Root).
&lt;br /&gt;Tutto ciò ricordandosi di importare il namespace System.IO !!</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/DirectoryInfo.aspx#comm</comments><guid>/Blog/DirectoryInfo.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/11.aspx</trackback:ping></item><item><title>System.Web.Mail - Spedire mail da pagine ASP.NET</title><link>http://www.peppedotnet.it/Blog/System.Web.Mail_spedire_mail.aspx</link><pubDate>Tue, 02 Nov 2004 14:34:35 GMT</pubDate><description>E' il namespace che ci da la possibilità di interagire con il servizio SMTP del server su cui risiedono le noste pagine ASP.NET; tramite le sue classi, possiamo infatti mandare delle e-mail con poche righe di codice:
&lt;br /&gt;&lt;code&gt;&lt;%@ Page Language="C#" Debug="true" %&gt;
&lt;br /&gt;&lt;%@ import Namespace="System" %&gt;
&lt;br /&gt;&lt;%@ import Namespace="System.Web" %&gt;
&lt;br /&gt;&lt;%@ import Namespace="System.Web.Mail" %&gt;
&lt;br /&gt;&lt;script runat="server"&gt;
&lt;br /&gt;    private void sendMail(object sender, EventArgs e)
&lt;br /&gt;    {
&lt;br /&gt;        try
&lt;br /&gt;        {
&lt;br /&gt;            MailMessage mail = new MailMessage();
&lt;br /&gt;            mail.From = "PeppeDotNet.it";
&lt;br /&gt;            mail.To = "info@peppedotnet.it";
&lt;br /&gt;            mail.Subject = "Invio mail da una pagina ASP.NET";
&lt;br /&gt;            mail.Body = "Questa è una prova ...";
&lt;br /&gt;            SmtpMail.Send(mail);
&lt;br /&gt;        }
&lt;br /&gt;        catch(Exception exe)
&lt;br /&gt;        {
&lt;br /&gt;            lbl.Text = exe.Message+exe.StackTrace;
&lt;br /&gt;        }
&lt;br /&gt;    }
&lt;br /&gt;&lt;/script&gt;
&lt;br /&gt;&lt;html&gt;
&lt;br /&gt;    &lt;body&gt;
&lt;br /&gt;        &lt;form runat="server"&gt;
&lt;br /&gt;            &lt;asp:Button id="btn" runat="server" Text="Send" onClick="sendMail" /&gt;
&lt;br /&gt;            &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;            &lt;asp:Label id="lbl" runat="server" /&gt;
&lt;br /&gt;        &lt;/form&gt;
&lt;br /&gt;    &lt;/body&gt;
&lt;br /&gt;&lt;/html&gt;&lt;/code&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/System.Web.Mail_spedire_mail.aspx#comm</comments><guid>/Blog/System.Web.Mail_spedire_mail.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/6.aspx</trackback:ping></item><item><title>dotMSN</title><link>http://www.peppedotnet.it/Blog/dotMSN.aspx</link><pubDate>Sun, 31 Oct 2004 10:12:59 GMT</pubDate><description>Ieri, girando nella rete, ho trovato questa interessantissima libreria scritta in c#:
&lt;br /&gt;&lt;a href="http://members.home.nl/b.geertsema/dotMSN/" title="dotMSN"&gt;dotMSN&lt;/a&gt;, una libreria di classi scritta in C#.NET che ci permette di utilizzare il servizio MSN Messenger; ci permette cioè di fare più o meno tutte le operazioni che si fanno normalmente con il caro Messenger:
&lt;br /&gt;- Connessione / Disconnessione
&lt;br /&gt;- Spedizione messaggi
&lt;br /&gt;- Aggiunta contatti
&lt;br /&gt;- Creazione gruppi
&lt;br /&gt;- Trasferimento files ... etc
&lt;br /&gt;Il tutto è contorniato da una gran bella &lt;a href="http://members.home.nl/b.geertsema/dotMSN/documentation/index.html" title="Documentazione"&gt;Documentazione&lt;/a&gt;.
&lt;br /&gt;Veramente un bel progetto ! Spero in un breve utilizzo ... ;-)</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/dotMSN.aspx#comm</comments><guid>/Blog/dotMSN.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/5.aspx</trackback:ping></item><item><title>Utilizzo del web control RangeValidator</title><link>http://www.peppedotnet.it/Blog/Utilizzo_control_RangeValidator.aspx</link><pubDate>Sun, 24 Oct 2004 16:39:27 GMT</pubDate><description>Prendendo spunto da una domanda fatta da un utente sul &lt;a href="http://www.devspy.com/Forum" title="forum di DevSpy.com"&gt;forum di DevSpy.Com&lt;/a&gt;, in questo secondo post volevo parlare dei Validator di ASP.NET, facendo un esempio d'uso del RangeValidator.
&lt;br /&gt;Il RangeValidator è un controllo che permette allo sviluppatore di verificare che il contenuto inserito da un utente in una TexBox, sia compreso in un certo intervallo di numeri (interi o con la virgola), stringhe o date, semplicemente specificando il valore minimo e massimo di questo intervallo. Ecco un esempio d'uso :
&lt;br /&gt;
&lt;br /&gt;&lt;code&gt;&lt;%@ Page Language="C#" Debug="true"%&gt;
&lt;br /&gt;&lt;script runat="server"&gt;
&lt;br /&gt;
&lt;br /&gt;    private void btn_onClick(object sender, EventArgs e)
&lt;br /&gt;    {
&lt;br /&gt;        if(Page.IsValid)
&lt;br /&gt;        {
&lt;br /&gt;            lbl.Text = "Valore inserito: "+txt.Text;
&lt;br /&gt;        }
&lt;br /&gt;    }
&lt;br /&gt;
&lt;br /&gt;&lt;/script&gt;
&lt;br /&gt;&lt;html&gt;
&lt;br /&gt;    &lt;body&gt;
&lt;br /&gt;        &lt;form runat="server"&gt;
&lt;br /&gt;            &lt;asp:TextBox id="txt" runat="server" /&gt;
&lt;br /&gt;            &lt;asp:RangeValidator id="rv"
&lt;br /&gt;                ControlToValidate="txt"
&lt;br /&gt;                MaximumValue="10"
&lt;br /&gt;                MinimumValue="0"
&lt;br /&gt;                Type="Integer"
&lt;br /&gt;                ErrorMessage="Il valore inserito non è corretto !"
&lt;br /&gt;                runat="server" /&gt;
&lt;br /&gt;            &lt;br /&gt;
&lt;br /&gt;            &lt;asp:Button id="btn"
&lt;br /&gt;                onClick="btn_onClick"
&lt;br /&gt;                Text="Controlla"
&lt;br /&gt;                runat="server" /&gt;
&lt;br /&gt;            &lt;br /&gt;
&lt;br /&gt;            &lt;asp:Label id="lbl" runat="server" /&gt;
&lt;br /&gt;        &lt;/form&gt;
&lt;br /&gt;    &lt;/body&gt;
&lt;br /&gt;&lt;/html&gt;&lt;/code&gt;
&lt;br /&gt;Comodo no ?</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/Utilizzo_control_RangeValidator.aspx#comm</comments><guid>/Blog/Utilizzo_control_RangeValidator.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>ASP.NET</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/2.aspx</trackback:ping></item></channel></rss>