Codice e slide della sessione su ASP.NET Dynamic Data 4.0

by Andrea 28 January 2010 01:03

Con un bel pò di ritardo, ecco il materiale del community meeting che ho tenuto il 11 Dicembre 2009 riguardante ASP.NET Dynamic Data 4.0. Per qualsiasi domanda potete contattarmi, o cosa migliore, utilizzare il forum di ASP.NET italiano http://social.microsoft.com/Forums/it-IT/aspnetit/.

Per il download:
- codice (Visual Studio 2010 - ASP.NET 4.0): Codice Dynamic Data 4.0
- slide (Power Point 2010): Slide Dynamic Data 4.0

Nella sessione (e in un precedente post) avevo consigliato di seguire alcuni blog (del team di sviluppo e di MVP su ASP.NET), che contengono post veramente utili con soluzioni alle problematiche più ricorrenti, ma anche solo per tenervi aggiornati a riguardo delle prossime/nuove funzionalità.

Mentre, per alcune delle risorse/soluzioni viste durante la sessione, i link di interesse sono i seguenti (i sorgenti dei progetti che trovate a questi link sono compresi nel download del codice sorgente della sessione, ma ovviamente aggiornati a dicembre 2009):

Tags: , ,

XeDotNet | Microsoft | .NET | ASP .NET

DynamicData e ColorPicker FieldTemplates

by Andrea 16 September 2009 03:17

Con i Dynamic Data la velocità di realizzare l'applicazione aumenta notevolmente (ovvio che dipende sempre dal tipo di applicazione che si deve realizzare) e con la creazione di FieldTemplates di ha la possibilità di migliorare l'iterazione tra applicazione e utente.

Una delle necessità che ho avuto è stata quella di dover far inserire il valore in esadecimale di un colore (es: #FFFFFF), e consapevole del fatto che un utente non potesse conoscere i valori a memoria, mi sono adoperato per realizzare un opportuno FieldTemplate.
L'ultima versione degli AJAX Control Toolkit mi è venuta in aiuto grazie al controllo ColorPicker che è stato recentemente incluso, ed ecco qui il risultato ottenuto:

ColorFieldTemplate

Il codice del FieldTemplate è il seguente:

   1: public partial class Color_EditField : FieldTemplateUserControl
   2: {
   3:     protected override void ExtractValues(IOrderedDictionary dictionary)
   4:     {
   5:         dictionary[Column.Name] = ConvertEditedValue(txtColor.Text);
   6:     }
   7:  
   8:     public override Control DataControl
   9:     {
  10:         get { return txtColor; }
  11:     }
  12: }
   1: <%@ Control Language="C#" CodeBehind="Color_Edit.ascx.cs" Inherits="DynamicData.FieldTemplates.Color_EditField" AutoEventWireup="True" %>
   2:  
   3: <asp:ImageButton 
   4:     runat="Server" 
   5:     ID="btnOpenColorPicker" 
   6:     style="float:left;margin:0 3px" 
   7:     ValidationGroup="none" 
   8:     ImageUrl="~/images/cp_button.png" 
   9:     AlternateText="Click to show color picker" />
  10: <asp:Panel 
  11:     runat="server"
  12:     ID="pnlColor" 
  13:     style="width:18px;height:18px;border:1px solid #000;margin:0 3px;float:left" />
  14: <atk:ColorPickerExtender 
  15:     runat="server"
  16:     ID="colorPicker"     
  17:     TargetControlID="txtColor" 
  18:     PopupButtonID="btnOpenColorPicker" 
  19:     SampleControlID="pnlColor" 
  20:     PopupPosition="Absolute" />
  21: <asp:TextBox ID="txtColor" 
  22:     runat="server" 
  23:     Text='<%# FieldValueEditString %>' 
  24:     style="visibility:hidden;" />

Nella mia applicazione non avevo la necessita di visualizzare il codice del colore (che compare nella TextBox), ma nel caso a qualcuno interessasse, sarà sufficiente togliere lo stile "visibility:hidden;" dalla TextBox txtColor.

Tags: ,

ASP.NET AJAX | ASP .NET | .NET

Codice e slide: Web Congress 2.0 - Dynamic Data

by Andrea 21 June 2009 13:37

Ecco qui disponibile il download del codice sorgente e delle slide del Web Congress 2.0 di venerdì 27 Marzo 2009 della mia sessione sui ASP.NET Dynamic Data

Slide: downlaod
Codice: download

Tags: , ,

XeDotNet | .NET | ASP .NET

Web Congress 2.0 - Ci vediamo tra poco

by andrea 27 March 2009 02: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

Utilizzare una pagina dei Dynamic Data in una folder differente

by andrea 16 February 2009 02:17

Può capitare di voler riutilizzare una pagina dei Dynamic Data (al di fuori della cartella dei Dynamic Data), e questo per avere "a gratis" le validazioni dei campi, oppure semplicemente perchè utilizzano dei FiledTemplate custom (su cui magari abbiamo investito parecchio tempo).
Nel mio caso, la necessità è nata dal voler far editare le informazioni della propria Azienda, senza dare accesso all'utente alla lista delle Aziende (percorso che viene normalemente proposto con i Dynamic Data: visualizzazione lista aziende -> dettaglio azienda).

COME FARE?

Per fare ciò è sufficiente copiare la pagina nel nuovo percorso e modificare il Global.asax in modo da aggiungere le regole di routing appropriate:

   1: routes.Add(new DynamicDataRoute("Edit/Company.aspx")
   2: {
   3:     Action = PageAction.Edit,
   4:     Model = model,
   5:     Table = "Companies"
   6: });

All'interno della pagina copiata, si dovranno valorizzare le proprietà EntitySetName e ContextTypeName della EntityDataSource, altrimenti si presenterà il seguente errore:

The control 'DetailsDataSource' does not have a TableName property and a table name could not be inferred from the URL.

Nel caso si utilizzi i Dynamic Data con LINQ to SQL, le proprietà da modificare sono TableName e ContextTypeName della LinqDataSource.

Se la pagina prevede eventuali parametri in querystring, dovranno essere presenti nell'url della pagina, oppure dovrete essere voi a settarli andando ad aggiungere da codice gli appropriati WhereParameters, e cancellando il controllo DynamicQueryStringParameter (contenuto nella datasource).

Technorati Tags: ,

Tags: ,

ASP .NET

Dynamic Data - Nascondere colonne in determinate action

by Andrea 19 December 2008 03:16

Nel visualizzare i dati nelle nostre applicazioni, spesso si ha la necessità di visualizzare un numero di informazioni differenti nel caso fossimo in una lista, o in un dettaglio o in edit di un nostro oggetto.

Lavorando con i Dynamic Data, di default la cosa non è possibile, ma con un pò di codice la cosa è fattibile.

Stephen Naughton ha trovato una soluzione davvero brillante, e cioè implementando l'interfaccia IAutoFieldGenrators (che viene utilizzata dalla GridView, e DetailsView per creare in automatico le colonne e/o fields), e creando un attributo da utilizzare nelle classi dei Metadati dove verranno specificate le action per le diverse property.

Il post è il seguente: Dynamic Data - Hiding Columns in selected PageTemplates

Tags: , , ,

ASP .NET

Dynamic Data - recuperare la action corrente

by Andrea 18 December 2008 06:42

Se avete la necessità di recuperare la action corrente all'interno di un FieldTemplate (o di una pagina dei Dynamic Data), il codice che potete utilizzare è il seguente:

   1: RequestContext requestContext = DynamicDataRouteHandler.GetRequestContext(HttpContext.Current);
   2: string action = requestContext.RouteData.GetRequiredString("action");
   3:  
   4: if (string.Compare(action, "Details", true) == 0)
   5: {
   6:     ...
   7: }
   8: else
   9: {
  10:     ...
  11: }

Una delle motivazioni in cui può essere utile recuperare tale informazione è nel caso di un FileldTemplate custom nella modalità di sola lettura dei dati, che viene utilizzato sia per la lista che per il dettaglio, e quindi può esserci la necessità di modificare la visualizzazione a seconda della action.

Nel mio caso, ho inserito due panel nel FieldTemplate e con il codice qui riportato ne modifico la visibilità (ovviamente eseguendo il databind dei soli interessati). Un panel contiene una Label con un contatore dei dati (utilizzato nella lista), mentre il secondo panel contiene una ListView che visualizza l'elenco dei figli (utilizzato nel Dettaglio). Questo per visualizzare informazioni recuperate da una relazione molti a molti.

Tags: , ,

ASP .NET

Dynamic Data - ScaffoldTable a false e CustomPages

by Andrea 16 December 2008 09:17

Può sembrare che il post parli di due argomenti distinti, ma non è così. Infatti il parametro ScaffoldTable e le CustomPage hanno una cosa in comune, e riguarda la visibilità delle tabelle.

Lavorando con i Dynamic Data, avevo la necessità di non visualizzare una mia classe/tabella. Per fare questo, la cosa è veramente semplice:

  • Impostare nel Global.asax ScaffoldAllTables = false, in modo essere noi a specificare quali tabelle visualizzare e quali no. (Per default lavoro già con questo parametro impostato a false, perchè le tabelle che di solito visualizzo con i Dynamic Data sono poche, rispetto quelle presenti nel database).
  • Creare una partial class della classe del modello di Entity Framework (o di Linq to SQL) e impostare l'attributo ScaffoldTable a false per nascondere, oppure a true per farle visualizzare.
    [ScaffoldTable(false)]
    public partial class Users
    {
    }

La cosa divertente (si fa per dire), è che sebbene abbia impostato tale attributo a false, la tabella era comunque visibile.
Ho fatto diverse prove, e poi ho ragionato nel cosa differisse questa classe rispetto a quelle non visibili, e l'unica risposta era...le CustomPage.

Se si imposta nella classe l'attributo ScaffoldTable con valore false, se esistono delle Custom page che le appartengono, la classe sarà (lo stesso) visibile nel nostro sito creato con i Dynamic Data.

Infatti, rinominando la cartella contenente le custom page da Users a _Users (oppure cancellando la cartella) la tabella si è correttamente eliminata dalla visualizzazione.
Non sono d'accordo su questo comportamento, e mi sarei aspettato che l'attributo avesse la priorità, ma c'è anche da dire, che se una persona crea delle custom page è perchè ha l'intezione di vidualizzare quei dati. Ecco quindi dei pro che dei contro per questa scelta.

Il lato negativo di questo aspetto è che uno è costrettto a eliminare eventuali CustomPage che avevo già creato (e customizzato), e che dovrò ripristinare appena quella sezione (quella tabella) dovrà essere visibile all'utente.

Update: Ho inserito la segnalazione su connect per capire se il comportamento è un by design oppure un bug. Ecco il link
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=388504

Tags: , ,

ASP .NET

Usare uno UserControl come Page Templates per i Dynamic Data

by Andrea 26 November 2008 00:04

Leggo oggi nel ble di David Ebbo della possibilità di associare uno UserControl come Page Template, e il tutto sia con l'utilizzo del routing, ma anche senza.

Il post è il seguente: Using User Controls as Page Templates in Dynamic Data

Non ho ancora provato la cosa, ma sicuramente a breve farò qualche test per capirne meglio i vantaggi. L'unico che vedo al momento è la possibilità di riutilizzare degli usercontrol esistenti eseguendo delle modifiche minime.

Technorati Tags: ,

Tags: , ,

ASP .NET

Dynamic Data e Field Template per relazione Molti a Molti

by Andrea 17 November 2008 01:39

Chi di voi ha iniziato a utilizzare i Dynamic Data con l’Entity Framework si sarà accorto della difficolta (o impossibilità) di editare le relazioni molti a molti delle proprie classi.

Un post di David Ebbo ci viene in soccorso proponendoci la creazione di un Field Template in grado di renderizzare una lista di CheckBox per visualizzare ed editare queste informazioni.
Il post è il seguente: A ‘Many To Many’ field template for Dynamic Data

Nello zip che potrete scaricare sono contenuti 2 Field Template, uno per la lettura e uno per l’edit delle relazioni (questi controlli saranno inseriti nella prossima versione dei Dynamic Data).ManyToMany_read ManyToMany_Edit

Tags: , ,

ASP .NET