Welcome

This is the generic homepage (aka Aggregate Blog) for a Subtext community website. It aggregates posts from every blog installed in this server. To modify this page, edit the default.aspx page in your Subtext installation.

To learn more about the application, check out the Subtext Project Website.

Powered By:

Blog Stats

  • Blogs - 689
  • Posts - 27813
  • Articles - 299
  • Comments - 64101
  • Trackbacks - 516828

Bloggers (posts, last update)

Latest Posts

WPF e Silverlight – Sempre sul Binding

Abbiamo quindi diversi Binding:

·         Simple bind, è la semplice associazione tra oggetto e percorso

·         Element Bind  è il bind tra un elemento e l’altro , ad esempio tra uno slider e una label che visualizzerà il valore dello slider

Abbiamo poi diverse modalità di binding che determinano il comportamento:

  • OneWay
  • TwoWay
  • OneTime OneWayToSource
Un’altra componente molto importante sui binding sono i converter:

http://www.winfxitalia.com/script/29/StringFormatConverter-Binding-WPF.aspx

http://blogs.msdn.com/bencon/archive/2006/05/10/594886.aspx

http://dotnetside.org/blogs/vito/archive/2007/07/03/ValueConverter-per-la-formattazione-in-WPF.aspx

 

Altri elementi molto importanti è l’implementazione e l’utilizzo dell’INotifyPropertyChanged che consente di notificare alla UI il cambio di valore delle property dell’oggetto in datacontext, e ObservableCollection.

http://www.visual-basic.it/articoli/adsWPF_DataBinding.htm

http://www.winfxitalia.com/script/25/Creare-Collezioni-Utilizzabili-Binding-WPF.aspx

posted @ 19/02/2010 9.26 by Alberto

Tool per gestire i JS

Un mio collega mi ha segnalato questo interessante link ad un tool che semplifica la gestione, i caricamenti in parallelo e le dipendenze tra i vari js : http://labjs.com

posted @ 19/03/2010 12.28 by Andrea Canegrati

WCF 4.0 Routing Service in IIS7

Interessante articolo sulla nuova feature di WCF.

http://seroter.wordpress.com/2010/03/09/simpler-way-of-hosting-the-wcf-4-0-routing-service-in-iis7/

Massimiliano

 

posted @ 19/03/2010 11.32 by Massimiliano Bellisario

Protestare fa bene

Sembra che finalmente i problemi di connessioni abbiano raggiunto una soluzione, dopo che l’anno scorso hanno cambiato il cavo mangiato dai topi, ieri il mio buon amico Marcello ed il suo collega della Telco hanno ricontrollato tutto il cavo dalla centralina a me, e sembra che la presa principale fosse difettosa.

Ora ho capito di essere sfortunato, perchè effettivamente avere i cavi rovinati, su una zona dove l’armadio è pieno ed infine avere anche la presa principale difettosa è un po una cosa da “malocchio”, :).

L’aspetto importante, è che bisogna sempre protestare con educazione. Evitando la tentazione di aggredire l’operatore, che non ha nessuna colpa, ogni volta che una grande azienda, sia essa la Telecom o chiunque altro, evitate la tentazione di dire “inutile protestare, tanto non serve a nulla”. Ve lo dico io… Serve. Oltre a telefonare al 187 numerose volte, ho scritto a vari ministeri, anche al ministero delle attività produttive, denunciando il fatto che senza connessione non lavoro e che ultimamente i problemi erano continui.

La mia lettera è stata protocollata, il ministero ha richiesto un controllo sul cavo, e finalmente la situazione sembra risolta. Inoltre ieri pomeriggio e stamattina mi hanno contattato dalla TElecom e Telco per sapere se è tutto ok, se il problema fosse risolto etc etc e mi hanno invitato a richiamare per ogni  eventuale ulteriore problema.

La morale è che, se i problemi persistono, una sana protesta a 360° solitamente smuove qualche cosa.

alk.

DotNetKicks Image

posted @ 19/03/2010 9.52 by Gian Maria Ricci

Novità del Mix2010

Per chi fosse interessato a conoscere le novità presentate al mix2010, il 23 marzo verrà fatta una chat live per discutere di questo argomento. Qui trovate tutti i dettagli.

alk.

DotNetKicks Image

posted @ 19/03/2010 9.44 by Gian Maria Ricci

Pubblicata intervista su DotNetCenter

Su DotNetCenter è stata pubblicata una mia breve intervista rilasciata in occasione dell’immenente basta italia:

http://dotnetcenter.it/news/10/Intervista-a-Michele-Aponte-speaker-di-BASTA-Italia-2010.html

Mi è stato chiesto anche come è nata la nostra community e che obiettivi si pone… magari chi è curioso di sapere come è nata questa fantastica avventura vedrà soddisfatta la propria curiosità. Ne approfitto per ringraziare ancora una volta tutti gli iscritti e i miei 4 amici cofondatori:

Antonio Liccardi

Alessandro Forte

Carmine Alfano

Marco Savarese

Come direbbe un mio amico (Marcello): siete fottissimi (senza r)…

Michele

posted @ 19/03/2010 6.42 by Michele Aponte

Principio K.I.S.S. verifica se lo applichi davvero

Translate into ENGLISH >>>





Guardando i numeri, diresti che il tuo team pratica realmente il principio K.I.S.S. o diresti che segue la legge di Parkinson ?



  •  .NET Framework 2.0 il nucleo é composto in tutto da soli 12 Assembly per piú di 12.000 classi (una media di 800 per progetto) e 2.800.000 istruzioni IL (190.000 per progetto)
    Fonte: Analyzing the .NET Framework 2.0 with NDepend
  •  Google ha un singolo source code repository che é completamente accessibile a tutti i 10.000 sviluppatori. Sebbene tutti i sistemi vengono rilasciati indipendentemente l'uno dall'altro (con cicli di rilascio che variano da una settimana a un mese), tutto viene  compilato dalla HEAD senza l'uso di binari precompilati, il repository accetta diverse migliaia di modifiche al giorno con picchi di 20+ modifiche per minuto.
    Fonte:  Mark Striebeck engineering manager a Google, al suo speech al  XPDay London 2009 (guarda anche il report da questo post)

  • Flickr riceve 40.000 nuove foto per secondo e ha ne archivia piú di 3 miliardi di foto al giorno, vengono eseguiti piú di 10 nuovi rilasci al giorno.  Due fattori abilitanti per queste prestazioni tra i molti citati: un unico version control condiviso e no branching.
    Fonte:
    Dev and Ops Cooperation at Flickr


E ora chiediti:
- In quanti Project/Assembly  é scomposta la code-base?
- Da quanti code repository distinti (server o trunk) devi fare il get dei sorgenti per compilare la code-base?
- Quante Solution distinte devi compilare per compilare la code-base?
- Oltre al trunk su quanti altri branch sviluppa il team?


La legge di Parkinson applicata alla complessitá della code-base dice che la complessitá della code-base tende ad espandersi sino alla massima capacitá del team e della azienda di gestire la complessitá, invece di limitarsi alla complessitá minima richiesta dai problemi affrontati.





Tags :   |  |  |  |  |

posted @ 18/03/2010 21.02 by Luca Minudel

IE9 provare per credere

Dal Mix spuntano mirabolanti soprese ma per provarle?

image

La versione di prova non ha nemmeno la barra degli indirizzi e i menu di navigazione ma si puo’ usare tranquillamente per i propri test attraverso delle scorciatoie da tastiera oppure navigando sui menu del programma.

Ecco gli shorcuts disponibili:

Ctrl + O:  Apre una pagina web
F5: Refresh
F10: Home
F12: Developer Toolbar
Alt + 5: Forza in modalità di rendering IE5
Alt + 7: Forza in modalità di rendering IE7
Alt + 8: Forza in modalità di rendering IE8
Alt + 9: Forza in modalità di rendering IE9
Alt + 0: Resetta al default
Ctrl +/-: zoom in e out
Alt + ?: Help
Ctrl + S: Salva la pagina web come…
Alt + /: Informazioni su…

Dai che si va ;)

S.

posted @ 18/03/2010 12.38 by Sonny

Una scelta importante…

 

Riavviata la macchina…bisogna prendere una decisione…

image

image

posted @ 18/03/2010 11.14 by Pietro Libro

Il 23 Marzo si parla del Mix

Martedì 23 Marzo, dalle 15 alle 16, Microsoft Italia terrà una sessione di chat dedicata alla novità del Mix 2010 (Silverlight 4 RC, Windows Phone 7 Series, IE9 e HTML 5, jQuery, OData). Per partecipare, è sufficiente collegarsi a questo link il giorno dell’evento.

posted @ 18/03/2010 9.56 by Marco Minerva

Mix2010 Spettacolo !!

Per tutti quelli che amano lo Spettacolo lascio il link dei video.

Video Gallery e qui

image

posted @ 18/03/2010 9.23 by Sonny

Safari e IE9 a confronto sul 3D in HTML5

image

Senza parole…

posted @ 18/03/2010 8.48 by Alessandro Scardova

Open Data Control



nuovo protocollo xml per lo scambio dati via internet.

http://www.odata.org

posted @ 18/03/2010 0.42 by Alessandro Gervasoni

Rilasciato Open XML SDK 2.0 for Microsoft Office

Da questo link potete accedere a tutte le risorse dell’SDK finalmente in RTM, utile per produrre diettamente dai vostri software Documenti in formato Open XML. Office automation adieu!

posted @ 17/03/2010 22.13 by Alessandro Scardova

Good Mode: Cartelle speciali in Windows 7

Windows 7 permette di creare cartelle denominate Good Mode in cui troveremo organizzati tutte le principali funzionalità di gestione del nostro sistemo operativo.

L’operazione è banale; la sintassi per creare queste cartelle sarà:

NOMECARTELLA.{codice del good mode}

per esempio

Windows 7 reti sicurezza tecniche avanzate.{ED7BA470-8E54-465E-825C-99712043E01C}1Ad operazione completata troveremo all’interno di questa cartella tutta una serie di funzionalità, organizzate per categorie, per la gestione di Windows 7.

2

Esistono altri parametri per creare cartelle simili aventi funzionalità specifiche,ad esempio:

  • {0142e4d0-fb7a-11dc-ba4a-000ffe7ab428} – (Dispositivi biometrici)
  • {025A5937-A6BE-4686-A844-36FE4BEC8B6D} – (Impostazioni risparmio energia)
  • {05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} – (Impostazioni icone e notifiche nella barra delle applicazioni)
  • {1206F5F1-0569-412C-8FEC-3204630DFB70} – (Credenziali per l’accesso automatico)
  • {15eae92e-f17a-4431-9f28-805e482dafd4} – (Installa un programma dalla rete)
  • {17cd9488-1228-4b2f-88ce-4298e93e0966} – (Impostazioni dei programmi predefiniti)
  • {1D2680C9-0E2A-469d-B787-065558BC7D43} – (Assembly)
  • {1FA9085F-25A2-489B-85D4-86326EEDCD87} – (Gestione reti wireless)
  • {208D2C60-3AEA-1069-A2D7-08002B30309D} – (Rete)
  • {20D04FE0-3AEA-1069-A2D8-08002B30309D} – (Esplora risorse, cartella “Computer”)
  • {2227A280-3AEA-1069-A2DE-08002B30309D} – (Stampanti e dispositivi)
  • {241D7C96-F8BF-4F85-B01F-E2B043341A4B} – (Connessione a desktop e stampanti in rete)
  • {4026492F-2F69-46B8-B9BF-5654FC07E423} – (Windows Firewall)
  • {78F3955E-3B90-4184-BD14-5397C15F1EFC} – (Prestazioni del computer)
  •  

    WINDOWS7_LIBRO

    Windows 7 reti sicurezza tecniche avanzate : tutto quello che devi sapere su Windows 7, ogni trucco e configurazioni avanzate. IL LIBRO SU WINDOWS 7

    posted @ 17/03/2010 17.43 by Marco Maltraversi

    Schermi ad alta risoluzione? Hot fix di Microsoft per Windows 7

    Se avete un monitor ad alta risoluzione 96 DPI o maggiore, se il vostro Pc ha installato una versione di  Windows 7 o di Windows Server 2008 R2 e se riscontrate lentezza al boot di Windows; questa Fix risolverà i vostri problemi (… almeno si spera).

    Per prima cosa per individuare, se il vostro Monitor ha una risoluzione in cui è necessario applicare questa FIX andiamo in Start\Pannello di controllo\Aspetto e personalizzazione\Schermo come mostra la seguente figura:

    schermo

    Se è selezionata l’opzione 125% o 150% o superiore il nostro Pc è nella cerchia di quelli che potrebbero ottenere benefici da questa patch.

    Quindi non ci resta che scaricarla dal link:http://support.microsoft.com/kb/977419/en-us

    ed installarla.

    17-03-2010 15-26-15

    Ad installazione completata dovremo poter beneficiare di questa Fix

    WINDOWS7_LIBRO

    Windows 7 reti sicurezza tecniche avanzate : tutto quello che devi sapere su Windows 7.Il libro di 784 pagine è edito da FAG Milano e viene veduto anche online sul sito della casa editrice e nelle migliori librerie .

    posted @ 17/03/2010 15.31 by Marco Maltraversi

    MEF ed i Metadata

    Alcune volte può capitare di dover associare delle informazioni agli export, per esempio specificare cosa ci offre una determinata implementazione di un contratto. Questo permette agli imports di sapere cosa offre un determinato componente/plugin e di utilizzare solo quelli che risolvono le nostre esigenze. MEF supporta due tipi di metadata: typed e non typed. Il post tratterà solo i metadata typed; per vedere un esempio di utilizzo dei non typed potete dare un’occhiata alla MEF Programming Guide.

    Ok ora possiamo partire a vedere qualcosa di concreto!

    Supponiamo di dover creare un plugin manager che ci permette di accedere ai plugins installati. Elenchiamo un paio di specifiche:

    1. I plugin implementano l’interfaccia IPlugin
    2. Un plugin può offrire funzionalità diverse, a seconda della funzionalità implementa una specifica interfaccia
    3. Il plugin manager deve implementare l’interfaccia IPluginManager
    4. Tramite il plugin manager possiamo ottenere uno o più plugins che offrono una determinata funzionalità


    Iniziamo col definire l’interfaccia IPluginManager

    public interface IPluginManager
    {
        event EventHandler PluginsChanged;
     
        IEnumerable<Lazy<IPlugin, IPluginMetadata>> Plugins { get; set; }
     
        T GetPlugin<T>() where T : class;
        IEnumerable<T> GetPlugins<T>() where T : class;
    }

    Supponiamo di avere due interfacce che specificano due diverse funzionalità:

    1. IFilter: filtra una collezione di dati (chiamiamolo segnale)
    2. IFeature: da un segnale estrae una particolare caratteristica
    public interface IFilter
    {
        IList<double> Filter(IList<double> values);
    }
    public interface IFeature
    {
        double Extract(IList<double> values);
    }
    Ora che abbiamo tutto il necessario per costruire il nostro sistema passiamo a giocare con i metadata. Come ho accennato all’inizio i metadata sono delle informazioni aggiuntive che associamo agli export. L’unica informazione di cui noi abbiamo bisogno è il tipo di funzionalità che espone il nostro plugin. Queste informazioni vengono “aggiunte” tramite l’attributo MetadataAttribute, ma visto che stiamo usando i metadata typed le nostre informazioni verranno associate ai vari export tramite l’attributo ExportPluginAttribute
    [MetadataAttribute]
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    public class ExportPluginAttribute : ExportAttribute, IPluginMetadata
    {
        public ExportPluginAttribute()
            : base(typeof(IPlugin))
        {
        }
     
        public Type PluginType { get; set; }
    }
    Dal codice possiamo notare tre cose fondamentali dell’attributo ExportPluginAttribute
    • E’ decorato con l’attributo MetadataAttribute che permette di segnalare al CompositionContainer (a dire il vero la classe che si occupa di recuperare le informazioni aggiuntive è un’altra) che contiene delle informazioni aggiuntive
    • Deriva da ExportAttribute così nelle implementazioni di IPlugin evitiamo di specificare ogni volta che il contratto è IPlugin (lo specifichiamo richiamando il costruttore di ExportAttribute)
    • Implementa l’interfaccia IPluginMetadata che contiene le informazioni aggiuntive (in questo caso solo il tipo del plugin, cioè il tipo di funzionalità: IFilter o IFeature)
    public interface IPluginMetadata
    {
        Type PluginType { get; }
    }

    Finalmente possiamo passare alla parte più importante della nostra piccola applicazione, il Plugin Manager!

    [Export(typeof(IPluginManager))]
    public class PluginManager : IPluginManager
    {
        private IEnumerable<Lazy<IPlugin, IPluginMetadata>> plugins;
     
        #region IPluginManager Members
     
        public event EventHandler PluginsChanged;
     
        [ImportMany(AllowRecomposition = true)]
        public IEnumerable<Lazy<IPlugin, IPluginMetadata>> Plugins
        {
            get
            {
                return plugins;
            }
     
            set
            {
                if (plugins == value)
                    return;
     
                plugins = value;
                OnPluginsChanged();
            }
        }
     
        public T GetPlugin<T>() where T : class
        {
            return GetPlugins<T>().FirstOrDefault();
        }
     
        public IEnumerable<T> GetPlugins<T>() where T : class
        {
            return (from p in this.Plugins
                    where p.Metadata.PluginType == typeof(T)
                    select p.Value).Cast<T>();
        }
     
        #endregion
     
        protected virtual void OnPluginsChanged()
        {
            EventHandler pc = PluginsChanged;
     
            if (pc != null)
                PluginsChanged(this, EventArgs.Empty);
        }
    }

    Le parti fondamentali di questo codice sono la proprietà Plugins ed il metodo GetPlugins<T>

    La proprietà Plugins è già stata vista nel post precedente e l’unica cosa da notare è l’utilizzo della classe Lazy<T, TMetadata> in maniera tale da poter accedere alle informazioni aggiuntive tramite la proprietà Metadata.

    Il compito del metodo GetPlugins<T> è molto semplice: recupera tutti i plugins che hanno la proprietà PluginType uguale al tipo di plugin che vogliamo :)

    Continuiamo con il mettere insieme i cocci…
    Il PluginManager verrà utilizzato dal ViewModel della MainWindow.xaml

    [Export(typeof(MainViewModel))]
    public class MainViewModel
    {
        private IPluginManager pluginManager;
     
        [ImportingConstructor]
        public MainViewModel(IPluginManager pluginManager)
        {
            this.pluginManager = pluginManager;
     
            this.FilterPlugins = new ThreadSafeObservableCollection<IFilter>();
            this.FeaturePlugins = new ThreadSafeObservableCollection<IFeature>();
     
            this.pluginManager.PluginsChanged += new EventHandler(pluginManager_PluginsChanged);
     
            this.LoadPlugins();
        }
     
        public ObservableCollection<IFilter> FilterPlugins { get; set; }
     
        public ObservableCollection<IFeature> FeaturePlugins { get; set; }
     
        private void pluginManager_PluginsChanged(object sender, EventArgs e)
        {
            LoadPlugins();
        }
     
        private void LoadPlugins()
        {
            this.FilterPlugins.Clear();
            this.FeaturePlugins.Clear();
     
            foreach (IFilter filter in pluginManager.GetPlugins<IFilter>())
                this.FilterPlugins.Add(filter);
     
            foreach (IFeature feature in pluginManager.GetPlugins<IFeature>())
                this.FeaturePlugins.Add(feature);
        }
    }

    Il PluginManager verrà passato al costruttore del MainViewModel grazie all’attributo ImportingConstructor e per caricare i plugins utilizziamo il metodo GetPlugins spiegato precedentemente.

    Cosa da notare è l’utilizzo della classe ThreadSafeObservableCollection<T>, caduta proprio a “faggiuolo” (termine tecnico) se guardate la data dell’articolo, al posto della classica ObservableCollection<T> in quanto se utilizziamo quest’ultima otteniamo un exception dove il Message è

    The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information.

    1) This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread.

    Resulting in: An exception occurred while trying to set the value of property 'PluginManager.PluginManager.Plugins'.

    Resulting in: Cannot activate part 'PluginManager.PluginManager'.
    Element: PluginManager.PluginManager -->  PluginManager.PluginManager -->  AssemblyCatalog (Assembly="PluginManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

    Questo perchè il metodo base.Refresh() del DirectoryWatcherCatalog viene chiamato su un thread diverso da quello della UI.

    Ora è restata solo la MainWindow, ed è proprio lei che si occupa di creare il CompositionContainer ed i Catalogs

    public MainWindow()
    {
        CompositionContainer compositionContainer;
        DirectoryWatcherCatalog directoryCatalog;
        AggregateCatalog aggregateCatalog;
     
        InitializeComponent();
     
        if (string.IsNullOrEmpty(Settings.Default.PluginsDirectory))
        {
            Settings.Default.PluginsDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Plugins");
     
            if (!Directory.Exists(Settings.Default.PluginsDirectory))
                Directory.CreateDirectory(Settings.Default.PluginsDirectory);
     
            Settings.Default.Save();
        }
     
        directoryCatalog = new DirectoryWatcherCatalog(Settings.Default.PluginsDirectory);
        aggregateCatalog = new AggregateCatalog(directoryCatalog, new AssemblyCatalog(Assembly.GetExecutingAssembly()));
        compositionContainer = new CompositionContainer(aggregateCatalog);
     
        compositionContainer.ComposeParts(this);
    }
     
    [Import(typeof(MainViewModel))]
    public MainViewModel ViewModel
    {
        get
        {
            return (MainViewModel)this.DataContext;
        }
     
        set
        {
            this.DataContext = value;
        }
    }

    All’interno della solution trovate un progetto chiamato MyPlugins (contiene 3 plugins che non fanno nulla :) ), una volta avviato il progetto PluginManager potete copiare MyPlugins.dll all’interno di ..\PluginManager\bin\Debug\Plugins e dovreste vedere due plugin Feature ed un plugin Filter.

    [Download Code]

    Buon MEF a tutti :D

    posted @ 17/03/2010 15.19 by Federico Degrandis

    Windows Live Writer & Joomla!

    Ho scoperto questa mattina, e con un considerevole ritardo che però devo ammettere, in altri “ambiti” sono facilmente tollerati, che è possibile postare articoli su Joomla! tramite Windows Live Writer.

    Finalmente non dovrò perdere quarti d’ora preziosi quando devo inserire una news, un articolo o quant’altro per PVI.

    Se avete bisogno anche voi di liberarvi del tempo libero, potete seguire queste semplici istruzioni.

    posted @ 17/03/2010 14.27 by Omar Damiani

    IE9 Preview vs Test Acid3 - Che sia la volta buona?

    Un post del mitico Alessandro Scardova mi ha fatto venire voglia di provare a vedere come se la cava IE9 con i test di compliance W3C, in particolare con Acid3, che è attualmente lo standard de facto in materia.  

    Internet Explorer è notoriamente il browser più diffuso ma ahimè anche il fanalino di coda nell'aderenza agli standard. Purtroppo, finché non vedremo un valore vicino al 100% nell'esecuzione del test (basterebbe già il 94% ottenuto da Mozilla 3.6 per cominciare), lo sviluppo di applicazioni Web 2.0 (ovvero il solito polpettone di HTML, Javascript, XML & c.) sarà un incubo.

    Ecco come si presenta oggi IE9 nella preview pubblica 1.9.7745.6019:

    IE9 Preview - Acid3 55%

    Il 55% ottenuto è ancora lontano dal 100% di Chrome, Safari e Opera e dal 94% di Firefox 3.6. Tuttavia rispetto al misero 20% di IE8 è un notevole passo avanti. Visto che questa è una pre-pre-pre-pre-beta, direi che c'è da sperare bene! :-)

    Un'altro aspetto poi sono le performance. I tempi di IE8 sono biblici se confrontati soprattutto con i browser Webkit based (Chrome, Safari), ma di questo parleremo più avanti, non prima di aver visto la beta.  

    L'utente in genere non considera queste problematiche come rilevanti, "tanto il sito funziona". Anzi, magari non funziona su Chrome proprio perchè è "workaround compliant" invece che W3C compliant. :-)

    Il problema è purtroppo nei costi e costi elevati => innovazione tecnologica ridotta.

    Sviluppo soluzioni Web da inizio anni '90, ho usato la stragrande maggioranza delle tecnologie che si sono alternate in questi anni (CGI, ASAP, Java Applet, Java Servlet, JSP, JSF, ASP, PHP, ASP.Net, Flash / Flex, Silverlight...) e posso dire che sviluppare su web non è mai stato costoso e problematico come oggi.

    Personalmente nel quotare i progetti ormai presento ove possibile sempre due soluzioni: una basata su Silverlight e una basata su ASP.Net Ajax (o MVC 2.0 le rare volte che i controlli di terze parti non servono). Contrariamente a quello che il cliente si aspetta, il preventivo Silverlight è nettamente inferiore alla controparte ASP .Net.

    La causa è semplice: la quantità di accrocchi in Javascript, i costi dei test e le generiche problematiche di compatibilità cross browser fanno lievitare i costi in maniera consistente per la seconda.

    Ipotizzando un rilascio di un IE9 W3C compliant in un futuro non lontano, bisognerà comunque aspettare come minimo un  paio d'anni dal rilascio prima di poter decretare la fine di IE8 e predecessori assortiti. Purtroppo stiamo ancora celebrando il funerale di IE6, che sembra però non essersene del tutto reso conto, visto quanto si vede ancora installato. IE è morto, lunga vita a IE

     

    Alessandro Pilotti [ MVP / IIS ]

     

    posted @ 17/03/2010 13.27 by Alessandro Pilotti

    ASP.NET Tip: TextBox readonly e ViewState


    Se si setta la proprietà ReadOnly di un TextBox ASP.NET a True, si avrà lo spiacevole effetto collaterale di perdere il viewstate del TextBox durante i postback.
    Questo perchè la proprietà ReadOnly viene valutata lato server e, indicando che il controllo è ReadOnly, implicitamente indica che tutte le modifiche lato client saranno ignorate.

    Per ovviare a questo problema si può impostare il readonly nella classica maniera impostando reaonly=”readonly” sul TextBox, oppure da codice utilizzando la proprietà attributes:

       1: this.txtTest.Attributes.Add("readonly", "readonly");

    posted @ 17/03/2010 12.40 by Alessandro Sorcinelli