SiteMapPath e la proprietà SkipLinkText

by Andrea 8/28/2008 9:57:00 AM

accessibilità Il controllo SiteMapPath ha una proprietà SkipLinkText che permette di inserire un collegamento invisibile che permette agli screen reader di poter saltare i link che il controllo visualizzerà.

Di default il controllo renderizza un link con l’alternate text “Skip Navigation Links” e al suo interno un’immagine da 0px per 0px (e quindi il tutto risualta invisibile).
La cosa però è di estrema utilità per i non vedenti, che usano browser che leggono il contenuto delle pagine (screen reader) e che invece sarebbero costretti a sentirsi leggere (per esempio) un gran numero di link (a volte inutili).

Nel caso volessimo disabilitare questa funzionalità, è sufficiente impostare a string.Empty il valore di SkipLinkText (SiteMapPath.SkipLinkText = “”).

Nel progetto a cui stò lavorando mi sono accorto di questa cosa analizzando il sorgente della pagina. Nel mio caso però questo codice aggiunto era inutile in quanto il controllo mi visualizza al massimo due link. Non capendo chi fosse ad aggiungere quel codice, mi sono messo a fare qualche ricerca fino a quando ho trovato la proprietà in oggetto, che a quanto pare è anche di utilità per aumentare l’accessibilità nei siti.

Technorati Tags: ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

accessibilità | ASP .NET

LINQ to SQL - Generare query IN utilizzando CONTAINS

by Andrea 7/29/2008 11:02:21 PM

Oggi mi sono trovato ad affrontare un problema di quelli banali, ma che (come al solito) mi ha fatto perdere un bel pò di tempo.
Il mio problema era ricavare un elenco di ID e Title dato un array di questi ID.

In SQL quello che avrei fatto sarebbe stato semplicissimo e con l’operatore IN avrei rislto in questo modo:

select id, title from Pages where id in (1,2,3,8,9)

Nel progetto a cui stò lavorando stò però utilizzando LINQ to SQL e trovare l’equivalente query è stata davvero dura (è il primo progetto dove uso seriamente LINQ to SQL), ma alla fine grazie al Contains sono riuscito a trovare la soluzione:

int[] pagesID = new int[] {1,2,3,8,9};
 
var pages = (from p in dc.Pages
             where pagesID.Contains(p.ID)
             select new { p.ID, p.Title });

Questa invece è la query generata da LINQ per recuperare i dati, che come vedete è simile a quella che avremmo realizzato noi:

exec sp_executesql N'SELECT [t0].[id] AS [ID], [t0].[Titolo] AS [Title]
FROM [dbo].[Pages] AS [t0]
WHERE [t0].[id] IN (@p0, @p1)',N'@p0 int,@p1 int',@p0=701,@p1=694

La soluzione è davvero banale, ma lo posso dire solo ora, dopo che ci ho sbattuto la testa, e la posto qui nel caso servisse anche a qualcuno di voi, o a me nel caso perdessi la memoria. ;-)

Lo spunto per la soluzione l’ho trovata in questo post: Creating IN Queries With Linq To Sql

Technorati Tags: ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP .NET | .NET

ASP.NET Dynamic Data - alcuni link

by Andrea 7/20/2008 10:43:00 PM

Ecco alcuni link che possono essere utili a chi stà provando ad utilizzare i Dynamic Data:

Using ASP.NET Dynamic Data with ObjectDataSource
http://blogs.msdn.com/.../using-asp-net-dynamic-data-with-objectdatasource.aspx

Dynamic Data and the Associated Metadata Class
http://blogs.msdn.com/.../dynamic-data-and-the-associated-metadata-class.aspx

How to add Dynamic Data to an Existing Web Site
http://blogs.msdn.com/.../how-to-add-dynamic-data-to-an-existing-web-site.aspx

How to add Dynamic Data to an Existing Web Application
http://blogs.msdn.com/.../how-to-add-dynamic-data-to-an-existing-web-application.aspx

A DynamicData Attribute Based Permission Solution using User Roles
http://csharpbits.notaclue.net/2008/05/introduction-this-project-is-going-to.html

Ed ecco i blog da seguire per rimanere aggiornati sulle novità dei Dynamic Data:

Technorati Tags: ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP .NET

Slide e Codice ultimi meeting

by Andrea 7/9/2008 5:07:12 PM

In questi giorni è stato pubblicato il meteriale (slide e codice) degli utlimi meeting. Mi spiace per il ritardo, ma gli impegni che abbiamo avuto in questo periodo non erano pochi.

Ecco i link agli eventi che sono stati aggiornati, dove potrete trovare le slide e il codice degli esempi:

Per qualsiasi domanda, o dubbio relativo ai vari argomenti e/o al materiale, non esitate a contattarmi.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

XeDotNet | ASP .NET

ASP.NET Dynamic Data - Custom Page

by Andrea 5/22/2008 10:05:28 PM

Come abbiamo vsito nel precedente post (Dynamic Data - Per iniziare), le pagine renderizzate sono basate su dei template che sono contenuti all'interno della cartella /DynamicData/PageTemplate/.
I template che abbiamo a disposizione sono:

  • Details.aspx
  • Edit.aspx
  • Insert.aspx
  • List.aspx
  • ListDetails.aspx

queste pagine utilizzano i classici controlli di ASP.NET (e ulterioli controlli contenuti nei Dynamic Data) che permettono di renderizzare in modo dinamico le informazioni presenti nel DataContext.

Ma nel caso volessimo personalizzare queste pagine per una determinata classe?

WebSiteFolder 1- All'interno della cartella /DynamicData/CustomPage/ creiamo una cartella con il nome della tabella di cui vogliamo personalizzare la visualizzazione, per esempio per Products dovremo creare la cartella
/DynamicData/CustomPage/Products/.

2- Copiare il template che si desidera modificare all'interno della cartella appena creata. Per esempio, per modificare la pagina di visualizzazione prodotti si dovrà copiare la pagina List.aspx in /DynamicData/CustomPage/Products/List.aspx.

3- Ora si può modificare a piacimento la pagina List.aspx appena creata. Si potrà sostituire il controllo GridView con un DataList, oppure modificare la GridView visualizzando solamente determinate colonne.
Per visualizzare in modo automatico i controlli di edit e visualizzazione i modo dinamico a seconda del tipo di DataField che andremo a bindare, i Dynamic Data introducono dei nuovi controlli, che sono per esempio i DynamicControl e il DynamicField. Questi controlli hanno la capacità di renderizzare il controllo apposito a seconda del tipo di dato che dovranno visualizzare, e creeranno anche tutti i validatori necessari.
Andremo in dettaglio su questi controlli in uno dei prossimi post.

<asp:GridView ID="GridView1" runat="server" 
    DataSourceID="GridDataSource"
    AllowPaging="True" 
    AllowSorting="True"
    CssClass="gridview" 
    AlternatingRowStyle-CssClass="even" 
    AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink 
                    ID="EditHyperLink" 
                    runat="server"
                    NavigateUrl='<%# table.GetActionPath(PageAction.Edit, GetDataItem()) %>'
                    Text="Edit" />&nbsp;
                <asp:LinkButton 
                    ID="DeleteLinkButton" 
                    runat="server" 
                    CommandName="Delete"
                    CausesValidation="false" Text="Delete"
                    OnClientClick='return confirm("Are you sure you want to delete this item?");'/>&nbsp;
                <asp:HyperLink 
                    ID="DetailsHyperLink" 
                    runat="server"
                    NavigateUrl='<%# table.GetActionPath(PageAction.Details, GetDataItem()) %>'
                    Text="Details" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:DynamicField DataField="ProductName" HeaderText="Nome Prodotto" />
        <asp:DynamicField DataField="UnitsInStock" HeaderText="Unità"  />
        <asp:DynamicField DataField="Discontinued" HeaderText="Produzione"  />
    </Columns>
 
    <PagerStyle CssClass="Footer"/>        
    <PagerTemplate>
        <asp:GridViewPager runat="server" />
    </PagerTemplate>
    <EmptyDataTemplate>
        There are currently no items in this table.
    </EmptyDataTemplate>
</asp:GridView>

Ecco come in semplici passi siamo riusciti a personalizzare una precisa pagina, potendola modificare in ogni suo particolare, da quello grafico, fino ad arrivare ai controlli inseriti. Utilizzando i template già esistenti, ci si trova di fronte un buon punto di partenza, dove saranno necessarie poche modifiche per adattare il tutto e arrivare al risultato voluto.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP .NET

ASP.NET Dynamic Data - Per iniziare

by Andrea 5/19/2008 10:05:54 PM

Il miglior modo per capire cosa siano i Dynamic Data è quello di provare a realizzare una semplice applicazione che ne faccia uso.

1- Creazione Dynamic Data WebSite

Creiamo da Visual Studio 2008 un nuovo WebSite, e tra i template disponibili selezioniamo Dynamic Data WebSite. Ricordo che questo template è disponibile solo installando il SP1 del Framework 3.5, o per chi abbia scaricato in precedenza il codice da questo link.

DynData_CreateWebsite

DynData_StructureIl WebSite appena creato avrà al suo interno una struttura di cartelle e file che permetteranno ai Dynamic Data di funzionare, e che permetteranno allo sviluppatore di poter personalizzare l'applicazione per adattarla alle proprie esigenze.

 

 

 2- Creazione Classe Linq To SQL

Dovremo poi creare una classe Linq To SQL (oppure Linq to Entity) da utilizzare come fonte dati per i Dynamic Data. Le classi che verranno inserite in Linq To SQL saranno poi quelle visualizzate (in automatico) nell'applicazione, e in qui sarà possibile leggere, modificare, inserire e cancellare i dati.
DynData_LinqToSqlSelezioniamo il progetto e procediamo a creare un oggetto di tipo LINQ to SQL Classes e rinominiamolo a seconda del db che andremo a interrogare (nel mio caso Northwind.dbml). Una volta creato l'oggetto, trasciniamo all'interno le tabelle che vogliamo utilizzare la LINQ to SQL.
(Nel codice da me realizzato faccio uso del database Northwind presente tra i samples di SQL Server)

3 - Configurazione - Modifica Global.asax

Per associare il datacontext di LINQ to SQL ai Dynamic Data dovremo intervenire nel file Global.asax.
Si dovrà togliere il commento e modifcare la riga di codice dove viene eseguito la registrazione del datacontext, come segue (specificando il datacontext creato da LINQ to SQL nel passo precedente):

model.RegisterContext(
    typeof(NorthwindDataContext), 
    new ContextConfiguration() { ScaffoldAllTables = true });

Impostanto a ScaffoldAllTables a True, permetterete ai Dynamic Data di interfacciare tutte le tabelle presenti nel datacontext associato. (Nei prossimi post vedremo come modificare questa parte di configurazione per interfacciare solo determinate classi).

4 - Avvio del progetto - Il gioco è fatto

Ora non rimane altro che premere F5 ed eseguire il progetto.
Il WebSite che ci si trova davanti permetterà sarà completamente navigabile, e conterrà tutte le pagine necessarie per visualizzare e modificare i dati presenti nel db (interfacciati da LINQ to SQL).
Da notare che le pagine di modifica e inserimento dei dati comprendono anche tutta la validazione necessaria.

DynData_WebSiteDynData_ProductsDynData_Product

I Dynamic Data permettono allo sviluppatore di ridurre in modo notevole i tempi di sviluppo, in quanto ci si dovrà occupare della grafica del portale, di eventuali permessi/ruoli di visibilità e di accesso, e di configurare l'applicazione in modo da permettere la visualizzazione o la modifica solo di alcuni campi presenti (e questo argomento verrà approfondito in uno dei prossimi post).

Codice Sorgente di questo esempio - Download

ASP.NET 3.5 Dynamic Data su MSDN Code Gallery

Technorati Tags: ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP .NET

ASP.NET Dynamic Data... cosa sono?

by Andrea 5/17/2008 10:05:40 PM

Lo devo proprio ammettere, questi Dynamic Data sono proprio stupendi!
In questo periodo ho avuto modo di approfondirli per bene, e rilascio dopo rilascio si può dire che Microsoft stà facendo proprio un bel lavoro, e i progressi si vedono.

Cosa sono i Dynamic Data?
I Dynamic Data permettono di creare una Web Application per l'accesso e la gestione dati utilizzando un meccanismo chiamato scaffolding. Questo meccanismo, unito ai Dynamic Data Control, permette di creare dinamicamente tutte le pagine per la visualizzazione, inserimento e modifica di dati recuperandoli da un DataContext (per esempio LINQ to SQL o LINQ to Entity). Le pagine create sono facilmente customizzabili e hanno al loro interno già tutte le regole e la logica di validazione.

Questa ovviamente è una definizione grossolana dei Dynamic Data, ma con i prossimi post vedrò di andare in dettaglio nelle varie parti che compongono questo nuovo mondo.

Se volete rimanere aggiornati sull'argomento, vi consiglio di seguire i blog di:

e ovviamente il mio. :D

Per chi volesse provare i Dynamic Data, al momento l'unica possibilità è solamente quella di installarsi il Microsoft .NET Framework 3.5 Service pack 1 Beta che ricordo è in BETA e li racchiude al suo interno.

E buon divertimento!!

Technorati Tags: ,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP .NET

Remainder per i ritardatari - ASP.NET 3.5 Community Meeting

by Andrea 5/16/2008 5:05:32 PM

Siamo al 16 Maggio 2008 ed è giunta la giornata in cui terrò il Community Meeting su ASP.NET 3.5 al NOVOTEL a Mestre.

Cosa vi spetterà questa sera?
Le novità introdotte in Visual Studio 2008 per gli sviluppatori Web, i nuovi Data Control (ListView, LinqDataSource, DataPager), ASP.NET AJAX e per quanto riguarderà il futuro, vedrete all'opera i Dynamic Data. E vedrete degli esempi che dimostreranno il come realizzare un'applicazione completa sia ora ancora più facile.

Non vi siete ancora registrati?
Ecco qui il link: http://www.xedotnet.org/48/section.aspx/295

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP .NET | XeDotNet

Prossimi appuntamenti - Community Meeting e Web Congress

by Andrea 4/11/2008 2:04:37 AM

Mi ero promesso di stare un pò calmo per alcuni mesi in modo da riuscire ad avere un pò di più tempo libero, ma a quanto pare è più forte di me, e la passione per la community prende sempre il sopravvento. Eccomi qui infatti ad indicarvi i prossimi appuntamenti che mi vedranno partecipe:

LogoXeDotNet Venerdì 16 Maggio 2008 terrò il community meeting su ASP.NET 3.5 al NOVOTEL a Mestre.
http://www.xedotnet.org/48/section.aspx/295

WebCongress Giovedì 29 Maggio 2008 a Pordenone, XeDotNet con 1nn0va organizzano un'evento tutto dedicato al Web, dove verranno trattati come argomenti Silverlight 2.0, Windows Communication Foundation e le novità di ASP.NET 3.5 (che spetta a me).
http://webcongress.xedotnet.org

E quindi, registratevi e mi raccomando, non mancate! ;)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP .NET | XeDotNet

Guida ASP.NET Starter Kit

by Andrea 4/8/2008 2:04:41 AM

guida_starterkit Nel sito di HTML.it è uscita oggi una guida sugli starter kit di ASP.NET, e verrà arricchita di nuovi articoli nel corso delle prossime settimane.

Cos'ha di interessante questa guida?
Un motivo semplicissimo, gli articoli sugli starter kit sono scritti da me, e questo è già un buon motivo per seguirla.
Mario Fontana ha dato il via a questa guida scrivendo la parte introduttiva (Introduzione, Download e Requisiti, Installazione), e a me spetta il dettaglio su tutta una serie di starter kit (che inizieranno ad uscire a breve).

La guida è di livello base, ma credo valga la pena seguirla perchè ci si rende davvero conto di quanto sia semplice l'utilizzo degli starter kit e la loro customizzazione.

Ecco il link alla guida: Guida ASP.NET Starter Kit

Technorati Tags: ,,

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP .NET