Tip
[ASP.NET] Validare i controlli della pagina dato il ValidationGroup

Posto questi due metodi perchè ho trovato divertente riuscire a rendere il codice così striminzito grazie a C# 3.0 e alla ricorsione:

   1:    private void ValidateByGroup(string validationGroup) {
   2:     List<BaseValidator> validators = new List<BaseValidator>(from validator in FindControlsByType<BaseValidator>(this)
   3:                      where validator.ValidationGroup == validationGroup select validator);
   4:     validators.ForEach(validator => validator.Validate());
   5:    }
   6:   
   7:    private static IList<T> FindControlsByType<T>(Control root) where T: Control {
   8:     List<T> controls = new List<T>();   
   9:     foreach (Control child in root.Controls) {
  10:      Type type = child.GetType().BaseType;
  11:      while(type != typeof(object)){
  12:       if (type == typeof(T))
  13:       {
  14:        controls.Add((T)child);
  15:        break;
  16:       }
  17:       type = type.BaseType;
  18:      }
  19:   
  20:      if (child.HasControls())
  21:       controls.AddRange(FindControl<T>(child));
  22:     }
  23:     return controls;
  24:    }


Perchè funzioni è necessario disabilitare il controllo lato client impostando a False la proprietà EnableClientScript dei validator. Per rendere comunque la pagina reattiva sarebbe bene sfruttare AJAX perchè in questo modo il controllo verrà fatto solo lato server.

Matteo Migliore.

Add Comment Filed Under [ ASP.NET Tip ]
[Tip] Versioning degli Assembly di una stessa solution

Un semplice tip che mi ha consigliato Mauro per il versioning degli assembly a cui non avevo pensato, ma utile per avere un repository comunue delle informazioni relative alla società, nome e versione del prodotto e altre informazioni. In pratica anzichè definire un file AssemblyInfo.cs (o .vb) per ogni progetto, si crea un file condiviso in tutta la soluzione (o più soluzioni) e lo si referenzia in ogni project come link.

In questo modo tutti gli assembly avranno associate le stesse informazioni, potendo ovviamente redefinire quelle specifiche e legate al project.

Qui trovate come fare:
http://weblogs.asp.net/lorenh/archive/2004/09/20/232200.aspx

La condivisione delle informazioni è utile specialmente se utilizzata nella metodologia del Continuous Integration, uno dei pilastri dell'Extreme Programming. Uno dei sostenitori? Il mitico Martin Fowler, amato da Andrea (anche se lui dice di no ).

Un tool che assiste la pratica del Continuos Integration è Cruise Control .NET.

Matteo Migliore.

Add Comment Filed Under [ Tip Architettura ]