1 / 26

ASP.NET Dynamic Data

ASP.NET Dynamic Data. Andrea Dottor – Microsoft MVP ASP/ASP.NET. Cosa sono gli ASP.NET Dynamic Data?. Permettono di creare una Web Application per l'accesso e la gestione dati utilizzando un meccanismo chiamato scaffolding . . Wikipedia Scaffolding. [WIKIPEDIA] Scaffolding:.

etoile
Télécharger la présentation

ASP.NET Dynamic Data

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ASP.NET Dynamic Data • Andrea Dottor – Microsoft MVP ASP/ASP.NET

  2. Cosa sono gli ASP.NET Dynamic Data? • Permettono di creare una Web Application per l'accesso e la gestione dati utilizzando un meccanismo chiamato scaffolding. www.xedotnet.org

  3. Wikipedia Scaffolding • [WIKIPEDIA] Scaffolding: • Il termine scaffolding, introdotto in psicologia da Jerome Bruner e altri nel 1976, significa letteralmente "impalcatura". Indica quelle strategie di sostegno e quella guida ai processi di apprendimento che consentono di svolgere un compito sebbene non si abbiano ancora le competenze per farlo in autonomia, riuscendovi grazie all'aiuto di un esperto, di un adulto o di un pari più preparato che fornisce indicazioni e suggerimenti, nell'attesa che si riesca a maturare una piena autonomia nello svolgimento del compito. • Le componenti generali dello scaffolding sono: • a) reclutare il bambino al compito • b) mantenere la direzione dell'attività verso il problema da risolvere • c) semplificare le componenti del compito • d) mostrare le possibili soluzioni • e) ridurre i gradi di libertà della situazione www.xedotnet.org

  4. FLICKR Scaffolding • [FLICKR] Scaffolding: www.xedotnet.org

  5. Concetti base • Concetti dei Dynamic Data • Permettono di creare facilmente siti per l’accesso ai dati (operazioni di CRUD) • L’interfaccia è creata partendo dal Data Model • Data Model fausodeimetadati per descriveretutta la struttura e le relazioni • Le regoledivalidazionevengono create automaticamente • Le paginevengonocreteautomaticamente, utilizzandodei template • URL Routing è utilizzato per mappare gli url sulle pagine www.xedotnet.org

  6. Architettura • Architettura Page e Field Templates Data Model(Meta-data) Data Source Data Model(LINQ to SQL – Entity Framework) www.xedotnet.org

  7. Creazione progetto • Creazione di un progetto Dynamic Data – passo 1 • Utilizzare il template “DynamicData Web Site” • Il WebSite conterrà la cartella “DynamicData” www.xedotnet.org

  8. Creazione progetto • Creazione di un progetto Dynamic Data – passo 2 • Aggiungere classi LINQ toSQL oppure Entity Data Model www.xedotnet.org

  9. Creazione progetto • Creazione di un progetto Dynamic Data – passo 3 • Popoliamo il Data Model(LINQ to SQL oppure Entity Framework) • Drag & Drop delle tabelle da utilizzare. www.xedotnet.org

  10. Creazione progetto • Creazione di un progetto Dynamic Data – passo 4 • Configurazione del DataModel nel Global.asax per la registrazione del DataContext necessario per la creazione del Meta Model e delle regole di routing. MetaModelmodel = new MetaModel();model.RegisterContext(typeof(NorthwindDataContext), new ContextConfiguration() { ScaffoldAllTables = true }); www.xedotnet.org

  11. Page Templates • Page Templates • Contenute in DynamicData\Page Templates • Page Uses Controls: • DynamicDataManager • DynamicValidator • FilterRepeater • DynamicControl • DynamicField • GridView utilizzata per visualizzare i dati. www.xedotnet.org

  12. Page Modes • Page Modes • Separate-Page Mode(default) • Vengono utilizzate pagine distinte per la lista, l’edit, il dettaglio e l’inserimento di nuovi dati. • Combined-Page Mode • I dati vengono manipolati nella stessa pagina (Master-Dteails) • Differenti Page Modes possono essere associati a differenti tabelle www.xedotnet.org

  13. Separate-Page Mode • Separate-Page Mode • Utilizzo del seguente route nel Global.asax • {table}/{action}. • La {action} può avere i seguenti valori: • Edit • List • Details • Insert • Ogni operazione viene fatta in una pagina differente routes.Add( new DynamicDataRoute("{table}/{action}.aspx") { Constraints = new RouteValueDictionary( new { action = "List|Details|Edit|Insert" }), Model = model }); www.xedotnet.org

  14. Combined Page Mode • Combined Page Mode • Utilizzo del seguente route nel Global.asax • {table}/ListDetails.aspx • La pagina ListDetails è utilizzata per manipolare i dati e per visualizzarne il dettaglio. routes.Add( new DynamicDataRoute("{table}/ListDetails.aspx") { Action = PageAction.List, ViewName = "ListDetails", Model = model}); routes.Add( new DynamicDataRoute("{table}/ListDetails.aspx") { Action = PageAction.Details, ViewName = "ListDetails", Model = model}); www.xedotnet.org

  15. Combinazioni di Page Modes • Combinazioni di Page Modes • Ogni entità/tabella può far uso di un suo specifico Page Mode • Nel definire le regole di routing, l’ordine di inserimento è importante. routes.Add( new DynamicDataRoute(“Products/{action}.aspx") { Constraints = new RouteValueDictionary( new { action= "List|Details|Edit|Insert" }), Model = model, Table= “Products” }); routes.Add( new DynamicDataRoute("{table}/ListDetails.aspx") { Action = PageAction.List, ViewName = "ListDetails", Model = model}); routes.Add( new DynamicDataRoute("{table}/ListDetails.aspx") { Action = PageAction.Details, ViewName= "ListDetails", Model = model}); Non verrà eseguito in quanto ha lo stesso routing di quello precedente www.xedotnet.org

  16. Fields Template • Fields Template • Le pagine fanno uso dei FieldTemplates per visualizzare ed editare le informazioni • I controlli vengono iniettati a runtime • I field templates sono specializzati per tipo di dato che devono visualizzare • Boolean checkbox • Relationshipdropdownlist • Textshow  TextBox o Literal www.xedotnet.org

  17. Fields Template • Fields Template • Se non esiste un Field per un specifico tipo di dato, questo non verrà visualizzato • {tipoDato}.ascx • {tipoDato}_Edit.ascx • Tramite l’attributo UHint è possibilespecificare quale Field Utilizzare • Per sostituire il Field di default • Per assegnare un Field per un tiposconosiuto www.xedotnet.org

  18. Custom Pages Template • Custom Pages Template • Si possono creare dei nuovi templatedi pagina • Devono seguire la seguente regola • DynamicData\CustomPages\{entity_name}\PageName.aspx • Per associare una pagina ListDetails.aspxalla classe Suppliers • DynamicData\CustomPages\Suppliers\ListDetails.aspx www.xedotnet.org

  19. Custom Pages Template • Custom Pages Template • Le pagine contengono DynamicField • Permettono di iniettare a runtime il controllo corretto per visualizzare/editare il dato <Columns> <asp:DynamicField DataField="CompanyName" /> <asp:DynamicField DataField="Phone" /> <asp:DynamicField DataField="Fax" /> <asp:DynamicField DataField="Products" /> </Columns> • Le pagine cusomizzate devono mantenere lo stesso nome di quelle orignali • ListDetails.aspx, Edit.aspx, List.aspx, ... • Lo stesso URL viene utilizzato per accedere sia alle pagine customizzate, che ai template originali www.xedotnet.org

  20. Custom Field Template • Custom Field Template • Oltre alle pagine è possibile modificare anche i FieldTemplate, in modo dapoter editare dei tipi custom, oppure per modificare il comportamento o aspetto di quelligià presenti • I nuovi FieldTemplate devono estendere la classe FieldTemplate UserControl <asp:CalendarID="Calendar1" runat="server“ SelectedDate="<%# (FieldValue!=null)? FieldValue : DateTime.Now%>" VisibleDate="<%# (FieldValue!=null)? FieldValue : DateTime.Now%>" </asp:Calendar> • Utilizzare FieldValue per recuperare il valore da visualizzare • Utilizzarel’overridediExtractValues() per scrivereivalorinel DB protected override void ExtractValues(IOrderedDictionary dictionary) { dictionary[Column.Name] = ConvertEditedValue(Calendar1.SelectedDate.ToShortDateString()); } www.xedotnet.org

  21. MetaData application • MetaData application • I Dynamic Data utilizzano i MetaData per descrivere il Data Model. • Tramite i MetaData possiamo andare ad aggiungere “caratteristiche” al nostro Data Model • Si deve aggiungere i MetaData tramite una partial class using System; using System.ComponentModel.DataAnnotations; [MetadataType(typeof(EmployeeMetadata))] public partial class Employee { } public class EmployeeMetadata { [UIHint("DateTimeCalendar")] public objectHireDate{ get; set; } } www.xedotnet.org

  22. Validazione • Validazione • E’ possibili specifacare alcune validazioni tramite alcuni attributi inseriti nella classe dei MetaData • [Required()] • [Range(0,100)] • E’ possibile utilizzare gli eventi all’interno della partial class • Pattern On<Field>Changing, On<Field>Changed public class CustomerMetadata { [Required()] public object Title; } Public partial class Customer { partial void OnTitleChanging(string value) { if(!Char.IsUpper(value[0])) throw new ValidationException("Title must start with an upper case letter."); } } www.xedotnet.org

  23. Validazione • Validazione • E’ possibile utilizzare l’evento OnValidate (globale, della classe) • Si è in grado di filtrare la validazione anche per ChangeAction • Le eccezzioni vengono gestite nella pagina e visualizzate in un SummaryValidator (all’interno della pagina) Public partial class Employee { partial void OnValidate(System.Data.Linq.ChangeAction action) { if(action == System.Data.Linq.ChangeAction.Insert) { if(this._BirthDate.Value.CompareTo(DateTime.Now) > 0) throw new ValidationException(“The birth date cannot be in the future”); } } } www.xedotnet.org

  24. Conclusioni • Conclusioni • I Dynamic Data facilitano la creazione di data-driven website (che fanno uso di CRUD) • Aumentano la produttività in fase di sviluppo • Semplica la manutenzione dell’applicazione • Ampia possibilità di customizzazione • Aspetti negativi • Non coprono tutte le casistiche di sviluppo, ma solo una minima parte • In alcune applicazioni, ci si scontra con parecchi vincoli by design (è la prima release) www.xedotnet.org

  25. Prossimi Eventi • 3 Aprile 2009 • Test Driven Development – Mauro ServientiNovotel Venezia - Mestre • 30 Aprile 2009 • .NET Micro Framework – Mirco VaniniOnline – Live Meeting • 8 Maggio 2009 • NetTiers & code Generation – Davide SenatoreNovotel Venezia - Mestre • 5 Giugno 2009 • Programming C# 3.0 – Andrea DottorNovotel Venezia - Mestre In collaborazione con

  26. Links Andrea Dottor www.xedotnet.org

More Related