Belius' Blog http://blogs.ugidotnet.org/belius/Default.aspx Il blog di Simone Belia it-IT Simone Belia Subtext Version 2.6.0.0 Belius' Blog http://blogs.ugidotnet.org/images/RSS2Image.gif http://blogs.ugidotnet.org/belius/Default.aspx 77 60 Visual Studio 2008 Roadshow..... Eventi http://blogs.ugidotnet.org/belius/archive/2008/02/11/visual-studio-2008-roadshow.aspx <p>....a Perugia.</p> <p>Microsoft ha confermato l'evento ed ha pubblicato l'agenda nel sito.</p> <p><font face="Arial"><a href="http://www.microsoft.com/italy/launch2008/xml/after_perugia.htm">http://www.microsoft.com/italy/launch2008/xml/after_perugia.htm</a></font></p> <p>Se siete da queste parti l'8 aprile.....perchè non ci fate un salto?</p> <p>P.S. Scusate la mia mancanza dal blog in quest'ultimo periodo.....cercherò di rimediare! :-)</p><img src="http://blogs.ugidotnet.org/belius/aggbug/91129.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2008/02/11/visual-studio-2008-roadshow.aspx Mon, 11 Feb 2008 16:39:44 GMT http://blogs.ugidotnet.org/belius/archive/2008/02/11/visual-studio-2008-roadshow.aspx#feedback 30 http://blogs.ugidotnet.org/belius/comments/commentRss/91129.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/91129.aspx [OT] Buon Natale a tutti..... Funny http://blogs.ugidotnet.org/belius/archive/2007/12/06/ot-buon-natale-a-tutti.aspx <p>....è prestino....ma volevo già iniziare a fare gli auguri a tutti quanti</p> <p><font face="Arial"><a href="http://www.elfyourself.com/?id=1190319580">http://www.elfyourself.com/?id=1190319580</a></font></p> <p>Buona visione :-)</p><img src="http://blogs.ugidotnet.org/belius/aggbug/90127.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/12/06/ot-buon-natale-a-tutti.aspx Thu, 06 Dec 2007 11:02:36 GMT http://blogs.ugidotnet.org/belius/archive/2007/12/06/ot-buon-natale-a-tutti.aspx#feedback 30 http://blogs.ugidotnet.org/belius/comments/commentRss/90127.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/90127.aspx 1° evento dotNetUmbria Eventi http://blogs.ugidotnet.org/belius/archive/2007/12/01/1-evento-dotnetumbria.aspx <p>Ieri è stato il giorno del primo evento della nuova community <a target="_blank" href="http://www.dotnetumbria.org">dotNetUmbria.org</a>.</p> <p>Un grazie ad <a target="_blank" href="http://dotnetumbria.org/blogs/cruciani/default.aspx">Andrea</a> e a <a target="_blank" href="http://dotnetumbria.org/blogs/possanzini/default.aspx">Paolo</a> per l'organizzazione e per la volontà di aver creato il primo user group umbro dedicato alle tecnologie .NET.</p> <p>Un altro grazie a <a target="_blank" href="http://blogs.msdn.com/pietrobr/">Pietro Brambati</a> che con immenza pazienza ha risposto a tutte le mie domande in merito alle scelte future di Microsoft ed in merito all'Entity Framework che gli amanti degli ORM come me stanno aspettando impazientemente.</p> <p>E' stato sicuramente interessante soprattutto perchè è stato finalmente possibile conoscere altri "Umbri" che lavorano nel campo IT e che hanno la volontà di crescere insieme.</p> <p> </p> <p> </p><img src="http://blogs.ugidotnet.org/belius/aggbug/90053.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/12/01/1-evento-dotnetumbria.aspx Sat, 01 Dec 2007 20:59:52 GMT http://blogs.ugidotnet.org/belius/archive/2007/12/01/1-evento-dotnetumbria.aspx#feedback 754 http://blogs.ugidotnet.org/belius/comments/commentRss/90053.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/90053.aspx NHibernate 1.2.1GA NHibernate http://blogs.ugidotnet.org/belius/archive/2007/11/27/nhibernate-1.2.1ga.aspx <p>Ieri è stata rilasciata la versione 1.2.1GA e la potete trovare a questo indirizzo:</p> <p><font face="Arial"><a target="_blank" href="http://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969">http://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969</a></font></p> <p>Di aggiunte non ha, hanno solo corretto alcuni bug, ma la bella notizia è che stavano aspettando di rilasciare questa release per iniziare a dedicarsi pesantemente alla versione 2.0.....e li si che ci sarà da divertirsi.</p> <p>A questo <a target="_blank" href="http://www.ayende.com/Blog/archive/2007/11/13/What-is-going-on-with-NHibernate-2.0.aspx">indirizzo</a> potete trovare quelle che saranno le nuove funzionalità...e non sono poche.<br /> Leggete anche i feedback ce n'è uno di Fabio Maulo che integra il post.</p> <p> </p><img src="http://blogs.ugidotnet.org/belius/aggbug/89977.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/11/27/nhibernate-1.2.1ga.aspx Tue, 27 Nov 2007 19:16:04 GMT http://blogs.ugidotnet.org/belius/archive/2007/11/27/nhibernate-1.2.1ga.aspx#feedback 67 http://blogs.ugidotnet.org/belius/comments/commentRss/89977.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/89977.aspx Recuperare solo i valori essenziali con Nhibernate NHibernate http://blogs.ugidotnet.org/belius/archive/2007/11/16/recuperare-solo-i-valori-essenziali-con-nhibernate-again.aspx <p><font face="Arial">L'infrastruttura di NHibernate ci permette di recuperare con pochi sforzi le informazioni che stanno nel DB sottoforma di nostre classi opportunamente istruite.</font></p> <p><font face="Arial">Bene....e che c'è di nuovo? <br /> Nulla....ma ipotizziamo questo:</font></p> <p><font face="Arial">Ho una classe Customer che contiene 40 proprietà (non associazioni) che la descrivono.<br /> Ora voglio che in un menu a tendina della mia applicazione vengano inseriti tutti i Customer così da farne scegliere uno all'utente.</font></p> <p><font face="Arial">In questo scenario quello che mi serve è solo l'ID del customer ed il suo nome....allora perchè caricarsi tutti quanti i suoi dati?</font></p> <p><font face="Arial">Negli ultimi progetti che ho sviluppato con NHibernate ho cercato di trovare una metodologia per venire incontro a questa comune problematica in maniera "comoda" e "tipizzata"....e spero che quello che ho fatto possa rilevarsi utile anche per voi!!! :-)</font></p> <p><font face="Arial">Per prima cosa mi sono costruito una classe generica che mi permetta di descrivere i miei valori:</font> </p> <style type="text/css"><![CDATA[ .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }]]></style> <pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> NameValueDTO&lt;Tv, Tn&gt; { <span class="kwrd"> private</span> Tn _name; <span class="kwrd"> private</span> Tv _value; <span class="kwrd"> public</span> Tn Name { get { <span class="kwrd">return</span> _name; } } <span class="kwrd">public</span> Tv Value { get { <span class="kwrd">return</span> _value; } } <span class="kwrd">public</span> NameValueDTO(Tv <span class="kwrd">value</span>, Tn name) { _name = name; _value = <span class="kwrd">value</span>; } }</pre> <p>Successivamente mi sono costruito un metodo generico rappresentante la classe per la quale voglio estrapolare i valori (nel nostro caso Customer) ed al quale passerò il nome della proprietà dell'oggetto che vorrò visualizzare.</p> <pre class="csharpcode"><span class="kwrd">public</span> IList&lt;NameValueDTO&lt;<span class="kwrd">int</span>,<span class="kwrd">string</span>&gt;&gt; GetNameValue&lt;T&gt;(<span class="kwrd">string</span> propName) { ICriteria criteria = _session.CreateCriteria(<span class="kwrd">typeof</span>(T)); ProjectionList pl = Projections.ProjectionList(); pl.Add(Projections.Id()); pl.Add(Projections.Property(propName));</pre> <pre class="csharpcode"> criteria.SetProjection(pl); criteria.SetResultTransformer(<span class="kwrd">new</span> NHibernate.Transform.AliasToBeanConstructorResultTransformer( <span class="kwrd">typeof</span>(NameValueDTO&lt;<span class="kwrd">int</span>,<span class="kwrd">string</span>&gt;).GetConstructors()[0])); <span class="kwrd"> return</span> criteria.List&lt;NameValueDTO&lt;<span class="kwrd">int</span>, <span class="kwrd">string</span>&gt;&gt;(); }</pre> <pre class="csharpcode"> </pre> <p>Esaminiamo il codice.<br /> La prima istruzione crea un oggeto <strong>Criteria</strong> basandosi sul tipo della classe che ho passatto come parametro del generic.<br /> Successviamente creo una <strong>ProjectionList</strong> che mi servirà per incapsulare i campi che desidero "aggregare" (anche se non è la parola giusta in questo esempio....:-)).</p> <p>L'istruzione successiva è la più interessante.<br /> <strong>SetResultTransformer</strong> dice ad NH di trasformare (<em>AliasToBeanConstructorResultTransformer</em>) i valori di ritorno dalla query istanziare nel tipo di oggetto che gli ho specificato (<em><span class="kwrd">typeof</span>(NameValueDTO&lt;<span class="kwrd">int</span>,<span class="kwrd">string</span>&gt;)</em>) utilizzando il primo costruttore <em>GetConstructors()[0];</em></p> <p>A questo punto il gioco è fatto....richiamando il metodo GetNameValue mi verrà ritornata la mia bella collezione con solo i campi richiesti.</p> <p> </p><img src="http://blogs.ugidotnet.org/belius/aggbug/89738.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/11/16/recuperare-solo-i-valori-essenziali-con-nhibernate-again.aspx Fri, 16 Nov 2007 19:57:26 GMT http://blogs.ugidotnet.org/belius/archive/2007/11/16/recuperare-solo-i-valori-essenziali-con-nhibernate-again.aspx#feedback 15 http://blogs.ugidotnet.org/belius/comments/commentRss/89738.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/89738.aspx [Tools] FileHelpers Tools http://blogs.ugidotnet.org/belius/archive/2007/11/07/tools-filehelpers.aspx <p><a href="http://minchiachefame.iobloggo.com/">Marco</a> mi ha segnalato <a href="http://filehelpers.sourceforge.net/">questa libreria</a> free per gestire il caricamento di un file di testo in una forma strong-typed di una nostra classe o viceversa serializzare una classe in un file di testo semplicemente corredando con degli attributi le proprietà della nostra classe.<br /> <br /> Detto così può sembrare riduttivo, ma controllate il sito e vedrete che risolve tanti problemucci..... :-)</p> <p> </p><img src="http://blogs.ugidotnet.org/belius/aggbug/89516.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/11/07/tools-filehelpers.aspx Wed, 07 Nov 2007 20:29:51 GMT http://blogs.ugidotnet.org/belius/archive/2007/11/07/tools-filehelpers.aspx#feedback 27 http://blogs.ugidotnet.org/belius/comments/commentRss/89516.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/89516.aspx Janky....colpisce ancora!!!! http://blogs.ugidotnet.org/belius/archive/2007/11/02/janky.colpisce-ancora.aspx <p>Lunedì e martedì scorso sono stato al Mastering Enterprise .NET Web Application tenuto presso ObjectWay dal sempre più preparato (e sempre più meritato MVP) <a title="" href="http://blogs.ugidotnet.org/janky" rel="" target="_blank">Janky</a>.....</p> <p>Più che soffermarsi su una problematica specifica l'intento del corso è stato quello di dare una panoramica a 360° di quelle che sono le problematiche e quelle che sono le soluzioni attuali (e le prospettive future) per creare applicazioni di un certo livello.</p> <p>C'è da dire che se da un lato abbiamo visto che ASP.NET è pronto per affrontare certe problematiche dall'altro ha fatto vedere ancora una volta come Microsoft cerca sempre di andare controtendenza per poi tornare sui suoi passi (vedi pattern MVC).<br /> Quello che mi ha fatto molto piacere è che sia io che tutti i partecipanti (compreso <a title="" href="http://blogs.ugidotnet.org/janky" rel="" target="_blank">Janky</a>) abbiamo tutti la stessa diffidenza rispetto a mamma Microsoft su alcune scelte, come per esempio la volontà di far diventare tutti sviluppatori tramite i Drag&amp;Drop, cosa che riteniamo tutti assolutamente impossibile.</p> <p>In ogni caso grazie Giancarlo della tua disponibilità e della tua umiltà (non si trova molto facilmente in giro) ed un saluto a tutti partecipanti del corso che ho conosciuto.</p> <p>Simone</p> <p><font size="1"><em>P.S. Unico rimprovero? ObjectWay non puoi mandare <a title="" href="http://blogs.ugidotnet.org/janky" rel="" target="_blank">Janky</a> da un cliente appena finito il corso.....si rischia solo di far fare le cose di fretta, anche perchè è più che normale che alla fine di un corso si sfori di una mezz'oretta per le domande ed i saluti!!! :-)</em></font></p><img src="http://blogs.ugidotnet.org/belius/aggbug/89360.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/11/02/janky.colpisce-ancora.aspx Fri, 02 Nov 2007 09:42:02 GMT http://blogs.ugidotnet.org/belius/archive/2007/11/02/janky.colpisce-ancora.aspx#feedback 22 http://blogs.ugidotnet.org/belius/comments/commentRss/89360.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/89360.aspx [UPDATE] NHibernate complex queries ASP.NET Tips http://blogs.ugidotnet.org/belius/archive/2007/10/16/update-nhibernate-complex-queries.aspx <p>Pochi giorni fa avevo scritto un <a href="http://blogs.ugidotnet.org/belius/archive/2007/10/10/nhibernate-complex-queries.aspx">post</a>  su come creare degli oggetti che incapsulassero le informazioni per filtrare dei dati in NH (e non solo).</p> <p>Questo post non è altro che una piccolissima aggiunta con l'implementazione di una classe che rappresenta l'ordine dei risultati della query.</p> <div class="code">Il concetto è quello di avere una classe che contenga il campo da ordinare e la direzione di ordinamento (espressa tramite un enum).</div> <div class="code"><br /> </div> <div class="code"><font color="#0000ff">public class </font><font color="#000000">OrderField<br /> {<br />      </font><font color="#0000ff">private string </font><font color="#000000">_field </font><font color="#0000ff">= string</font><font color="#000000">.Empty</font><font color="#0000ff">;<br />      private </font><font color="#000000">OrderDirection _direction </font><font color="#0000ff">= </font><font color="#000000">OrderDirection.Asc</font><font color="#0000ff">;<br /> <br />      public string </font><font color="#000000">Field<br />      {<br />          </font><font color="#0000ff">get </font><font color="#000000">{ </font><font color="#0000ff">return </font><font color="#000000">_field</font><font color="#0000ff">; </font><font color="#000000">}<br />          </font><font color="#0000ff">set </font><font color="#000000">{ _field </font><font color="#0000ff">= value; </font><font color="#000000">}<br />      }<br /> <br />      </font><font color="#0000ff">public </font><font color="#000000">OrderDirection Direction<br />      {<br />          </font><font color="#0000ff">get </font><font color="#000000">{ </font><font color="#0000ff">return </font><font color="#000000">_direction</font><font color="#0000ff">; </font><font color="#000000">}<br />          </font><font color="#0000ff">set </font><font color="#000000">{ _direction </font><font color="#0000ff">= value; </font><font color="#000000">}<br />      }<br /> <br />      </font><font color="#0000ff">public </font><font color="#000000">OrderField(</font><font color="#0000ff">string </font><font color="#000000">field, OrderDirection direction)<br />      {<br />          _field </font><font color="#0000ff">= </font><font color="#000000">field</font><font color="#0000ff">;<br />          </font><font color="#000000">_direction </font><font color="#0000ff">= </font><font color="#000000">direction</font><font color="#0000ff">;<br />      </font><font color="#000000">}<br /> }</font> </div> <p> </p> <div class="code"><font color="#0000ff">public enum </font><font color="#000000">OrderDirection<br /> {<br />       Asc,<br />       Desc<br /> }</font> </div> <div class="code"> </div> <div class="code">Visto che potrebbero verificarsi numerosi casi in cui un solo campo non basta ai fini dell'ordinamento, ho pensato fosse utile implementare una collezione che dasse la possibilità di recuperare in un colpo tutta la stringa di ordinamento.</div> <p> </p> <div class="code"><font color="#0000ff">public class </font><font color="#000000">OrderFieldList: List&lt;OrderField&gt;<br /> {<br />       </font><font color="#0000ff">public override string </font><font color="#000000">ToString()<br />       {<br />           StringBuilder sb </font><font color="#0000ff">= new </font><font color="#000000">StringBuilder(</font><font color="#808080">""</font><font color="#000000">)</font><font color="#0000ff">;<br />           if </font><font color="#000000">(</font><font color="#0000ff">this</font><font color="#000000">.Count &gt;</font><font color="#0000ff">= </font><font color="#800000">0</font><font color="#000000">)<br />           {<br />               sb.Append(</font><font color="#808080">"ORDER BY "</font><font color="#000000">)</font><font color="#0000ff">;<br />               foreach </font><font color="#000000">(OrderField of </font><font color="#0000ff">in this</font><font color="#000000">)<br />               {<br />                   sb.AppendFormat(</font><font color="#808080">"{0} {1},"</font><font color="#000000">, of.Field, of.Direction.ToString())</font><font color="#0000ff">;<br />               </font><font color="#000000">}<br /> <br />               sb.Remove(sb.Length-</font><font color="#800000">1</font><font color="#000000">, </font><font color="#800000">1</font><font color="#000000">)</font><font color="#0000ff">;<br />           </font><font color="#000000">}<br /> <br />           </font><font color="#0000ff">return </font><font color="#000000">sb.ToString()</font><font color="#0000ff">;<br />       </font><font color="#000000">}<br /> }</font> </div> <div class="code"> </div> <div class="code"> </div> <div class="code"> ...e per finire la sua implementazione ai fini pratici è:</div> <div class="code"> </div> <div class="code"><font color="#0000ff">string </font><font color="#000000">hql </font><font color="#0000ff">= </font><font color="#808080">"select c from Customer c where c.Country = :country"<br /> <br /> </font><font color="#006400">                <br /> </font><font color="#000000">OrderFieldList ofl </font><font color="#0000ff">= new </font><font color="#000000">OrderFieldList()</font><font color="#0000ff">;<br /> </font><font color="#000000">ofl.Add(</font><font color="#0000ff">new </font><font color="#000000">OrderField(</font><font color="#808080">"BirthDate"</font><font color="#000000">, OrderDirection.Desc))</font><font color="#0000ff">;<br /> </font><font color="#000000">ofl.Add(</font><font color="#0000ff">new </font><font color="#000000">OrderField(</font><font color="#808080">"LastName"</font><font color="#000000">, OrderDirection.Asc))</font><font color="#0000ff">;<br /> <br /> </font><font color="#000000">hql +</font><font color="#0000ff">= </font><font color="#000000">ofl.ToString()</font><font color="#0000ff">;<br /> <br /> </font><font color="#006400">//..........<br /> //..........<br /> //..........</font> </div> <div class="code"></div> <div class="code">....a presto!!!</div><img src="http://blogs.ugidotnet.org/belius/aggbug/88973.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/10/16/update-nhibernate-complex-queries.aspx Tue, 16 Oct 2007 14:37:24 GMT http://blogs.ugidotnet.org/belius/archive/2007/10/16/update-nhibernate-complex-queries.aspx#feedback 53 http://blogs.ugidotnet.org/belius/comments/commentRss/88973.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/88973.aspx Dynamic Data Controls for ASP.NET ASP.NET http://blogs.ugidotnet.org/belius/archive/2007/10/15/dynamic-data-controls-for-asp.net.aspx <p><font face="Arial">Microsoft ha messo a disposizione da poco tempo un'estensione di ASP.NET chiamata Dynamic Data Controls.<br /> Questa estensione non è altro che una libreria di controlli che collegandosi ad un DB ne recupera lo schema e genera a runtime tutte le pagine che sono necessarie al dataentry e la visualizzazione delle tabelle.</font></p> <p>L'estensione potete trovarla a questo indirizzo:  <font face="Arial"><a href="http://www.asp.net/downloads/futures/">http://www.asp.net/downloads/futures/</a></font></p> <p><font face="Arial"></font>Ancora una volta le scelte che fa Microsoft mi fatto restare a bocca aperta. Stanno lavorando moltissimo su LINQ e l'EF eppure tirano fuori un set di controlli che vanno completamente contro al DDD.</p> <p>[Pensiero] :-)<br /> ...valà, non dirmi che anche i dipendenti Ms hanno il vicino rompi che gli dice...."dai fammi un programmino per la gestione dei miei dvd...tanto per te che ci capisci è un attimo".<br /> Se questo fosse, allora mi scuso e ringrazio!!<br /> </p><img src="http://blogs.ugidotnet.org/belius/aggbug/88945.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/10/15/dynamic-data-controls-for-asp.net.aspx Mon, 15 Oct 2007 10:35:27 GMT http://blogs.ugidotnet.org/belius/archive/2007/10/15/dynamic-data-controls-for-asp.net.aspx#feedback 60 http://blogs.ugidotnet.org/belius/comments/commentRss/88945.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/88945.aspx ASP.NET AJAX File Download ASP.NET AJAX Tips http://blogs.ugidotnet.org/belius/archive/2007/10/12/asp.net-ajax-file-download.aspx <p><a></a>Molte volte è necessario permettere agli utenti di scaricare dei file dalle nostre applicazioni ASP.NET, in maniera un pò più elaborata del semplice link alla risorsa. Mettete per esempio che il file da scaricare non esista, ma viene generato durante il postback, oppure mettete che per sicurezza i file stanno all'interno di una cartella del server non raggiungibile tramite Http. </p> <p>Le metodologie per venire incontro a queste problematiche sono state documentate tantissime volte, ma se voglio utilizzarle con AJAX si devono utilizzare dei trucchetti, proprio perchè, come per l'upload di file, AJAX non permette il download asincrono delle risorse.... </p> <p>In questo post troverete uno di questi trucchetti...e spero che vi faccia comodo come lo ha fatto a me!!! :-) </p> <p>Il trucchetto consiste di crearsi un HttpHandler che si occupi di recuperare la risorsa e che la restituisca sottoforma di stream nella Response. Logicamente l'handler potendo accedere al contesto e quindi il QueryString e quant'altro potrà effettuare tutti suoi controlli di sicurezza prima di restituire il file.....non me ne vogliano...ma in poche parole non fate come <a href="http://blogs.ugidotnet.org/raffaele/archive/2007/10/04/88715.aspx">loro</a>  :-) </p> <p>Successivamente nelle pagine dove è presente uno scriptmanager ed uno o più updatepanel si dovrà aggiungere questo frammento di codice JavaScript: </p> <p><font color="#0000ff">function </font>GetFile(parm) <br /> <font color="#0000ff">{ <br />    var <font color="#000000">iframe </font><font color="#000000">= document.createElement(<font color="#993300">"iframe"</font>); <br />    iframe.src = <font color="#993300">"Downloader.ashx?id="</font> + parm; <br />    iframe.style.display = <font color="#993300">"none"</font>; <br />   document.body.appendChild(iframe); <br /> </font>}</font> </p> <p>Il Javascript non fa altro che creare un tag iframe, impostare come src il nostro handler ed aggiungerlo alla pagina. In questa maniera noi possiamo tranquillamente aggiungere ad un bottone che si occupa di scaricare il file il seguente codice: </p> <br /> <font color="#2b91af" size="2">ScriptManager</font><font size="2">.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), </font><font color="#a31515" size="2">"download"</font><font size="2">, </font><font color="#a31515" size="2">"GetFile('5648752168497');"</font><font size="2">, </font><font color="#0000ff" size="2">true</font><font size="2">); </font><br /> <br /> <p>che "dice" allo scriptmanager della pagina di eseguire la funzione Javascript GetFile passandogli come parametro (in questo esempio un numerone di prova) un qualcosa che vi permetta di capire quale file scaricare. </p> <p> </p> <p>Il codice di esempio lo potete scaricare da <a href="http://www.beliusoft.com/public/filedownload.rar">qui</a></p><img src="http://blogs.ugidotnet.org/belius/aggbug/88911.aspx" width="1" height="1" /> Simone Belia http://blogs.ugidotnet.org/belius/archive/2007/10/12/asp.net-ajax-file-download.aspx Fri, 12 Oct 2007 12:55:53 GMT http://blogs.ugidotnet.org/belius/archive/2007/10/12/asp.net-ajax-file-download.aspx#feedback 24 http://blogs.ugidotnet.org/belius/comments/commentRss/88911.aspx http://blogs.ugidotnet.org/belius/services/trackbacks/88911.aspx