Web Congress 2.0 - Ci vediamo tra poco

by andrea 27 March 2009 11:19

WebCongress2Slide preparate…
…e come al solito le ho terminate questa notte. Devo ancora capire perchè posso iniziarle anche un mese prima degli eventi, ma mi ritrovo a far modifiche fino all'ultimo momento. :D

Codice fatto…   
…di questo ne vado abbastanza fiero. Sono riuscito ad applicare i DynamicData ad un caso reale (aggiungendo un'area per gestire quest'applicazione), ma non voglio svelare troppo.

e quindi tutto è pronto…ci vediamo questo pomeriggio al Web Congress.

Technorati Tags: ,

Tags: , , ,

ASP .NET | .NET | XeDotNet

Community is?

by Andrea 23 March 2009 02:19

Community is

E’ proprio vero...coltivare una community è un pò come coltivare una pianta:

  • le si deve prestare attenzione
  • ci si deve ricordare di alimentarla in modo da farla crescere, ma al tempo stesso, in modo che non appassisca
  • ognuno la deve sentire sua, e collaborare alla sua crescita

e se si applica (anche solo) un minimo di questi punti, sicuramente la pianta (la community) ricambierà dando mille soddisdazioni, che cresceranno di giorno in giorno.

 

Da dove nasce il tutto?
Quello che vedete in foto è un gadget che ho preso allo stand degli MVP al Tech-Ed di Barcellona, e che poco tempo fa mi è ricapitato in mano, e ho deciso di vedere cosa fosse una community.

Ho seminato, le ho dato regolarmente da bere, ed ecco che dopo pochi giorni ho avuto la risposta. La Community è Attenzione, Impegno, Amicizia, e tanta voglia di condividere.

Technorati Tags: ,

Tags: ,

XeDotNet | Tempo libero | Microsoft | Generale | Sfoghi

Seadragon Ajax

by andrea 13 March 2009 10:56

Leggendo il post di Mike Ormond sono venuto a conoscenza che Microsoft Live Labs  ha sfornato un nuovo progetto che ha dell'incredibile, dal nome Seadragon Ajax.

logo_color_seadragon_90 Questo progetto è una "replica" di Deep-Zoom, la funzionalità realizzata per silverlight che vi permette di gestire una foto grande quanto un campo da calcio, ed eseguire lo zoom fino al minimo particolare. Ma a differenza di Deep-Zoom questa è una funzionalità AJAX, che si appoggia completamente a JavaScript.

Ecco il link per vedere il progetto: http://livelabs.com/seadragon-ajax/

Tags: ,

ASP .NET | ASP.NET AJAX

FileUpload caricato in un postback asincrono

by andrea 13 March 2009 10:54

Se avete provato a caricare un controllo FileUpload durante un PostBack asincrono, oppure settate la visibilità da false a true, avrete notato che il controllo non funziona correttamente e quindi non vi permette di caricare il file (anche se con PostBackTrigger impostato correttamente).

Questo problema avviene perchè il controllo non è in grado di aggiornare correttamente il tag form della pagina.

Per risolvere il problema si deve modificare il tag form aggiungendo l'enctype:

   1: enctype="multipart/form-data"

è anche possibile aggiungerlo da codice utilizzando questo codice nel page_load:

   1: Page.Form.Attributes.Add("enctype", "multipart/form-data"); 

 

Tags:

ASP.NET AJAX | ASP .NET | .NET

Aggiornare un UpdatePanel da un differente UserControl

by andrea 11 March 2009 15:54

Quando si utilizza un UpdatePanel consiglio sempre di impostare la proprietà UpdateMode a Conditional e ChildrenAsTriggers a False, per avere il pieno controllo su ciò che accade, e far trafficare il minimo html possibile.

Ci sono condizioni però in qui questo non sembra possibile.
Uno di questi casi è quando il postback asincrono dovrebbe essere scatenato da un controllo contenuto all'interno di un'altro UserControl. La soluzione più semplice sarebbe stata quella di settare UpdateMode ad Always, ma questo causerebbe l'aggiornamento durante un qualsiasi postback asincrono.
Ma anche a questo caso esiste una soluzione, e la soluzione sono gli eventi.

UserControl 1
Controllo che contiene il pulsante che deve scatenare il PostBack asincrono.

Questo UserControl esporrà un evento Command, che servirà come trigger per indicare che è stato scatenato un evento in un controllo in esso contenuto (in questo caso un LinkButton).
Andiamo a gestire l'evento OnCommand del LInkButton, e al suo interno faremo rilanciare l'evento utilizzando il metodo RaiseBubbleEvent.

Gli UserControl possono contenere controlli che scatenano eventi. Il metdo RaiseBubbleEvent permette di rilanciare all'esterno questi eventi, permettendo di riassegnare il sender.

Si ha quindi la condizione che l'evento OnCommand scatenato dal LinkButton verrà visto come evento OnCommand (contenente le stesse informazioni) ma generato dallo UserControl.

   1: public event CommandEventHandler Command;
   2:  
   3:  
   4: protected void Button_Command(object sender, CommandEventArgs e)
   5: {
   6:     CommandEventHandler handler = this.Command;
   7:  
   8:     if (handler != null)
   9:         handler(this, e);
  10:  
  11:     base.RaiseBubbleEvent(this, e);
  12: }

UserControl 2
Controllo che contiene l'UpdatePanel da aggiornare con il PostBack asincrono.

Il controllo contiene un UpdatePanel che deve essere aggiornato dal PostBack asincrono scatenato dal controllo contenuto nel primo UserControl.

Quello che si può fare è esporre la collection del Triggers dell'UpdatePanel, in modo da poterli impostare da chi utilizza il controllo.

Creiamo una proprietà Triggers (di tipo UpdatePanelTriggerCollection) nello UserControl e gli facciamo ritornare la collezione di trigger dell'UpdatePanel.
Per poterla vedere nel design, aggiungiamo gli attributi DesignerSerializationVisibility e PersistenceMode.

DesignerSerializationVisibility permette di specificare la visibilità della proprietà a design-time.

PersistenceMode specifica come la proprietà viene inserita nello UserControl, se tramite attributo o come proprietà interna.
Esempio di Attribute è la proprietà ID="…", o runat="sever" , che vendono specificate come attributi del tag.
Esempio di InnerProperty sono i SelectedParameters, o i Triggers, che devono essere specificati in un elemento contenuto nel tag del controllo, e non come attributi.

   1: [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
   2: [PersistenceMode(PersistenceMode.InnerProperty)]
   3: public UpdatePanelTriggerCollection Triggers
   4: {
   5:     get { return updPanel.Triggers; }
   6: }

La pagina

Inseriamo nella pagina i due UserControl. Come sarà possibile vedere, nel controllo DisplayData (UserControl 2) sarà visibile una proprietà Triggers che ci da la possibilità di inserire un trigger associato al controllo Filters (e che si aggancerà all'evento Command che noi abbiamo esposto).
In questo modo, al click del pulsante contenuto nel UserControl di ricerca, avremo l'aggiornamento asincrono dell'UpdatePanel contenuto nel UserControl DisplayData.

   1: <dtr:Filters ID="filters" runat="server" />
   2: <dtr:DisplayData ID="displayData" runat="server">
   3:   <Triggers>
   4:       <asp:AsyncPostBackTrigger ControlID="filters" EventName="Command" />
   5:   </Triggers>
   6: </dtr:DisplayData>

Ecco quindi che grazie alla possibilità di esporre (e gestire) gli eventi, abbiamo potuto mantenere l'UpdatePanel con UpdateMode a Conditional, permettendo quindi di non far scatenare postback asincroni del tutto inutili.

Tags: , , ,

ASP.NET AJAX | ASP .NET | .NET

Windows 7 Installation Fest

by andrea 10 March 2009 16:49

Lunedì 23 Marzo di terrà a Padova l'evento Windows 7 Installation Fest.

Si tratta di un evento completamente gratuito dove avremo una presentazione delle novità introdotte in Windows 7, tenuta da Davide Senatore. Al termine della presentazione chiunque verrà con il proprio PC, o con una Virtual Machine, avrà la possibilità di installare (o di farsi installare) la beta del nuovo sistema operativo, e provare con mano le nuove funzionalità.

Windows 7 installation fest

L'evento si terrà a Padova, presso:

Start Cube 
Incubatore Universitario d'Impresa 
Via della Croce Rossa, 112 - 35129 PADOVA

Per partecipare all'evento è sufficiente registrarsi a questo link: REGISTRAZIONE.

NOTE:
Per garantire un rapido svolgimento delle installazioni si consiglia ai presenti di arrivare con la macchina pronta (formattata) o con Virtual PC già installato.

Technorati Tags: ,

Tags: ,

XeDotNet

Community Meeting Silverlight 2.0 - alcune foto

by Andrea 09 March 2009 19:54

Ecco qui alcune foto scattate al Community Metting Silverlight 2.0: Networking Explained e che dimostrano la numerosa partecipazione.

Devo proprio fare i miei complimenti ad Andrea per come ha saputo esporre quest’argomento e perchè finalmente si è vista una sessione su Silverlight senza vedere una riga di XAML, dimostrando quindi che questa tecnologia non è solamente interfaccia, ma molto di più.

DSC_0337DSC_0344 DSC_0340 DSC_0341  DSC_0348 DSC_0358

Tags: , ,

XeDotNet

MultiHandleSliderExtender in un Templated Control

by Andrea 05 March 2009 14:18

Se provate a utilizzare un MultiHandleSliderExtender all'interno di una GridView, o di un Repeater o di un altro Templated Control, vi capiterà con una bella eccezione javascript (null is null or not an object) in quanto non l'extender non riesce a trovare i controlli impostati come MultiHandleSliderTarget.
Dando un'occhiata al file javascript di questo extender si può notare che il controllo esegue la funzione $get (recupera un elemento all'interno della pagina) usando come parametro l'id inserito, ma che nel caso di inserimento in un Templated Control, questo sarà differente dall'effettivo id utilizzato nella pagina (ClientID), sollevando quindi l'eccezione.

Per risolvere questo è sufficiente gestire l'evento RowDataBound (nel caso della GridView) e sostituire in ogni MultiHandleSliderTarget l'id dei controlli con i rispetti ClientID.

Ecco il codice necessario:

   1: protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
   2: {
   3:     if (e.Row.RowType == DataControlRowType.DataRow)
   4:     {
   5:         MultiHandleSliderExtender slider = e.Row.FindControl("multiHandleSliderExtenderTwo") as MultiHandleSliderExtender;
   6:         foreach (MultiHandleSliderTarget target in slider.MultiHandleSliderTargets)
   7:             target.ControlID = e.Row.FindControl(target.ControlID).ClientID; 
   8:     }
   9: }

Tags: , , , ,

.NET | ASP .NET | ASP.NET AJAX