Condividi tramite


ASP.NET MVC 3

(include l'aggiornamento degli strumenti di aprile 2011)

ASP.NET MVC 3 è un framework per la creazione di applicazioni Web scalabili e basate su standard che usano modelli di progettazione ben definiti e la potenza di ASP.NET e .NET Framework.

Viene installato side-by-side con ASP.NET MVC 2, quindi iniziare subito a usarlo.

Scaricare il programma di installazione qui

Funzionalità principali

  • Estendibilità del sistema di Scaffolding integrato tramite NuGet
  • Modelli di progetto abilitati per HTML 5
  • Visualizzazioni espressive, incluso il nuovo motore di visualizzazione Razor
  • Hook potenti con inserimento delle dipendenze e filtri azione globali
  • Supporto JavaScript avanzato con JavaScript non invadente, convalida jQuery e binding JSON
  • Leggere l'elenco completo delle funzionalità di seguito

Novità di ASP.NET MVC 3

Installazione e guida

Panoramica di ASP.NET MVC 3

ASP.NET MVC 3 si basa su ASP.NET MVC 1 e 2, aggiungendo funzionalità eccezionali che semplificano il codice e consentono un'estendibilità più approfondita. Questo argomento offre una panoramica di molte delle nuove funzionalità incluse in questa versione, organizzate nelle sezioni seguenti:

Scaffolding estendibile con integrazione MvcScaffold

Il nuovo sistema di scaffolding rende più facile iniziare ad usarlo in modo produttivo se sei completamente nuovo al framework e automatizzare le attività di sviluppo comuni se hai esperienza e sai già cosa stai facendo.

Questa funzionalità è supportata dal nuovo pacchetto NuGet scaffolding denominato MvcScaffolding. Il termine "Scaffolding" viene usato da molte tecnologie software per indicare "generare rapidamente una struttura di base del software che è quindi possibile modificare e personalizzare". Il pacchetto di scaffolding creato per ASP.NET MVC è molto utile in diversi scenari:

  • Se si sta imparando ASP.NET MVC per la prima volta, perché offre un modo rapido per ottenere codice utile e funzionante, che è quindi possibile modificare e adattare in base alle proprie esigenze. Ti salva dal trauma di guardare una pagina vuota e non avendo idea di dove iniziare!
  • Se si conosce bene ASP.NET MVC e si stanno ora esplorando alcune tecnologie aggiuntive, ad esempio un mapper relazionale a oggetti, un motore di visualizzazione, una libreria di test e così via, perché l'autore di tale tecnologia potrebbe aver creato anche un pacchetto di scaffolding per la tecnologia stessa.
  • Se il tuo lavoro prevede ripetutamente la creazione di classi o file simili di qualche tipo, puoi creare scaffolder personalizzati che generano fixture di test, script di distribuzione o qualsiasi altro elemento necessario. Anche tutti i membri del team possono usare gli scaffolder personalizzati.

Altre funzionalità di MvcScaffolding includono:

  • Supporto per progetti C# e VB
  • Supporto per i motori di visualizzazione Razor e ASPX
  • Supporta lo scaffolding nelle aree di ASP.NET MVC e l'uso di layout/master di vista personalizzati
  • È possibile personalizzare facilmente l'output modificando i modelli T4
  • È possibile aggiungere nuovi scaffolder usando la logica di PowerShell personalizzata e i modelli T4 personalizzati. Questi (e tutti i parametri personalizzati assegnati) vengono visualizzati automaticamente nell'elenco di completamento della scheda della console.
  • È possibile ottenere pacchetti NuGet contenenti scaffolder aggiuntivi per tecnologie diverse (ad esempio, è disponibile un modello di verifica per LINQ to SQL ora) e combinarli e associarli insieme

L'aggiornamento degli strumenti di ASP.NET MVC 3 include un ottimo supporto di Visual Studio per questo sistema di scaffolding, ad esempio:

  • La finestra di dialogo Aggiungi controller supporta ora lo scaffolding automatico completo delle azioni Create, Read, Update e Delete del controller e delle visualizzazioni corrispondenti. Per impostazione predefinita, questo esegue lo scaffolding del codice di accesso ai dati usando Ef Code First.
  • La finestra di dialogo "Add Controller" supporta gli scaffold estensibili tramite pacchetti NuGet come MvcScaffolding. In questo modo è possibile inserire scaffolding personalizzati nella finestra di dialogo, il che consente di creare scaffolding per altre tecnologie di accesso ai dati, come NHibernate o anche JET con ODBCDirect, se lo si desidera!

Per altre informazioni sullo scaffolding in ASP.NET MVC 3, vedere le risorse seguenti:

Modelli di progetto HTML 5

La finestra di dialogo Nuovo progetto include una casella di controllo abilita le versioni HTML 5 dei modelli di progetto. Questi modelli sfruttano Modernizr 1.7 per fornire supporto per la compatibilità per HTML 5 e CSS 3 nei browser di livello inferiore.

Motore di visualizzazione Razor

ASP.NET MVC 3 include un nuovo motore di visualizzazione denominato Razor che offre i vantaggi seguenti:

  • La sintassi Razor è pulita e concisa, richiedendo un numero minimo di sequenze di tasti.
  • Razor è facile da imparare, in parte perché si basa su linguaggi esistenti come C# e Visual Basic.
  • Visual Studio include IntelliSense e la colorazione del codice per la sintassi Razor.
  • Le visualizzazioni Razor possono essere sottoposte a unit test senza richiedere l'esecuzione dell'applicazione o l'avvio di un server Web.

Di seguito sono riportate alcune nuove funzionalità Razor:

  • @model sintassi per specificare il tipo passato alla vista.
  • @* *@ sintassi dei commenti.
  • Possibilità di specificare le impostazioni predefinite ( ad esempio layoutpage) una volta per un intero sito.
  • Metodo Html.Raw per la visualizzazione del testo senza codifica HTML.
  • Supporto per la condivisione del codice tra più visualizzazioni (file _viewstart.cshtml o _viewstart.vbhtml ).

Razor include anche nuovi helper HTML, ad esempio i seguenti:

  • Chart. Esegue il rendering di un grafico, offrendo le stesse funzionalità del controllo grafico in ASP.NET 4.
  • WebGrid. Visualizza una griglia di dati, completa di paginazione e funzionalità di ordinamento.
  • Crypto. Usa algoritmi di hashing per creare password opportunamente saltate e cifrate.
  • WebImage. Esegue il rendering di un'immagine.
  • WebMail. Inviare un messaggio di posta elettronica.

Per altre informazioni su Razor, vedere le risorse seguenti:

Supporto per più motori di visualizzazione

La finestra di dialogo Aggiungi visualizzazione in ASP.NET MVC 3 consente di scegliere il motore di visualizzazione da utilizzare e la finestra di dialogo Nuovo progetto consente di specificare il motore di visualizzazione predefinito per un progetto. È possibile scegliere il motore di visualizzazione Web Form (ASPX), Razor o un motore di visualizzazione open source, ad esempio Spark, NHaml o NDjango.

Miglioramenti del controller

Filtri azioni globali

A volte si vuole eseguire la logica prima dell'esecuzione di un metodo di azione o dopo l'esecuzione di un metodo di azione. Per supportare questo problema, ASP.NET MVC 2 ha fornito filtri di azione. I filtri di azione sono attributi personalizzati che forniscono un mezzo dichiarativo per aggiungere il comportamento di pre-azione e post-azione a metodi di azione specifici del controller. In alcuni casi, tuttavia, è possibile specificare il comportamento di pre-azione o post-azione applicabile a tutti i metodi di azione. MVC 3 consente di specificare filtri globali aggiungendoli alla GlobalFilters raccolta. Per altre informazioni sui filtri delle azioni globali, vedere le risorse seguenti:

Nuova proprietà "ViewBag"

I controller MVC 2 supportano una ViewData proprietà che consente di passare dati a un modello di visualizzazione usando un'API del dizionario con associazione tardiva. In MVC 3 è anche possibile usare una sintassi leggermente più semplice con la ViewBag proprietà per raggiungere lo stesso scopo. Ad esempio, invece di scrivere ViewData["Message"]="text", è possibile scrivere ViewBag.Message="text". Non è necessario definire classi fortemente tipate per usare la ViewBag proprietà . Poiché si tratta di una proprietà dinamica, è possibile semplicemente ottenere o impostare le proprietà e le risolverà in modo dinamico in fase di esecuzione. Internamente, ViewBag le proprietà vengono archiviate come coppie nome/valore nel ViewData dizionario. Nota: nella maggior parte delle versioni non definitive di MVC 3, la ViewBag proprietà era chiamata la ViewModel proprietà.

Nuovi tipi "ActionResult"

I tipi seguenti ActionResult e i metodi helper corrispondenti sono nuovi o migliorati in MVC 3:

  • HttpNotFoundResult. Restituisce un codice di stato HTTP 404 al client.
  • RedirectResult. Restituisce un reindirizzamento temporaneo (codice di stato HTTP 302) o un reindirizzamento permanente (codice di stato HTTP 301), a seconda di un parametro booleano. In combinazione con questa modifica, la classe Controller include ora tre metodi per eseguire reindirizzamenti permanenti: RedirectPermanent, RedirectToRoutePermanente RedirectToActionPermanent. Questi metodi restituiscono un'istanza di RedirectResult con la Permanent proprietà impostata su true.
  • HttpStatusCodeResult. Restituisce un codice di stato HTTP specificato dall'utente.

Miglioramenti di JavaScript e Ajax

Per impostazione predefinita, gli helper di convalida e Ajax in MVC 3 usano un approccio JavaScript non invadente. JavaScript non invadente evita l'inserimento di JavaScript inline in HTML. Questo rende il codice HTML più piccolo e meno disordinato e semplifica lo scambio o la personalizzazione delle librerie JavaScript. Gli helper di convalida in MVC 3 usano anche il jQueryValidate plug-in per impostazione predefinita. Se si vuole un comportamento MVC 2, è possibile disabilitare JavaScript non invadente usando un'impostazione di fileweb.config . Per altre informazioni sui miglioramenti di JavaScript e Ajax, vedere le risorse seguenti:

Convalida lato client abilitata per impostazione predefinita

Nelle versioni precedenti di MVC, è necessario chiamare esplicitamente il metodo Html.EnableClientValidation da una vista per abilitare la convalida lato client. In MVC 3 non è più necessario perché la convalida lato client è abilitata per impostazione predefinita. È possibile disabilitare questa impostazione usando un'impostazione nel file web.config .

Per consentire il funzionamento della convalida lato client, è comunque necessario collegare le librerie jQuery e jQuery Validation appropriate nel sito. È possibile ospitare tali librerie nel proprio server o farvi riferimento da una rete per la distribuzione di contenuti (CDN) come le reti CDN di Microsoft o Google.

Validator remoto

ASP.NET MVC 3 supporta la nuova classe RemoteAttribute che consente di sfruttare il supporto del validator remoto jQuery Validation. Ciò consente alla libreria di convalida lato client di chiamare automaticamente un metodo personalizzato definito nel server per eseguire la logica di convalida che può essere eseguita solo sul lato server.

Nell'esempio seguente, l'attributo Remote specifica che la convalida client chiamerà un'azione denominata UserNameAvailable sulla UsersController classe per convalidare il UserName campo.

public class User 
{
    [Remote("UserNameAvailable", "Users")]
    public string UserName { get; set; }
}

Nell'esempio seguente viene illustrato il controller corrispondente.

public class UsersController 
{ 
    public bool UserNameAvailable(string username) 
    { 
        if(MyRepository.UserNameExists(username)) 
        { 
            return "false"; 
        } 
        return "true"; 
    } 
}

Per altre informazioni su come usare l'attributo Remote , vedere Procedura: Implementare la convalida remota in ASP.NET MVC in MSDN Library.

Supporto per il binding JSON

ASP.NET MVC 3 include il supporto predefinito dell'associazione JSON che consente ai metodi di azione di ricevere dati con codifica JSON e associarli a parametri action-method. Questa funzionalità è utile negli scenari che coinvolgono modelli client e data binding. I modelli client consentono di formattare e visualizzare un singolo elemento di dati o un set di elementi di dati usando modelli eseguiti nel client. MVC 3 consente di connettere facilmente i modelli client con metodi di azione sul server che inviano e ricevono dati JSON. Per altre informazioni sul supporto dell'associazione JSON, vedere la sezione Miglioramenti di JavaScript e AJAX del post di blog di Scott Guthrie MVC 3 Preview.

Miglioramenti alla convalida dei modelli

Attributi dei metadati "DataAnnotations"

ASP.NET MVC 3 supporta DataAnnotations attributi di metadati come DisplayAttribute.

Classe "ValidationAttribute"

La ValidationAttribute classe è stata migliorata in .NET Framework 4 per supportare un nuovo IsValid overload che fornisce altre informazioni sul contesto di convalida corrente, ad esempio l'oggetto da convalidare. Ciò consente scenari più avanzati in cui è possibile convalidare il valore corrente in base a un'altra proprietà del modello. Ad esempio, il nuovo CompareAttribute attributo consente di confrontare i valori di due proprietà di un modello. Nell'esempio seguente, la ComparePassword proprietà deve corrispondere al Password campo per essere valido.

public class User
{ 
    [Required]
    public string Password { get; set; } 
    [Required, Compare("Password")] 
    public string ComparePassword { get; set; } 
}

Interfacce di convalida

L'interfaccia IValidatableObject consente di eseguire la convalida a livello di modello e consente di fornire messaggi di errore di convalida specifici dello stato del modello complessivo o tra due proprietà all'interno del modello. MVC 3 ora recupera gli errori dall'interfaccia IValidatableObject durante il binding del modello e contrassegna automaticamente i campi interessati all'interno di una visualizzazione utilizzando gli helper dei moduli HTML incorporati.

L'interfaccia IClientValidatable consente ASP.NET MVC di individuare in fase di esecuzione se un validator supporta la convalida client. Questa interfaccia è stata progettata in modo che possa essere integrata con un'ampia gamma di framework di convalida.

Per altre informazioni sulle interfacce di convalida, vedere la sezione Model Validation Improvements del post di blog MVC 3 Preview di Scott Guthrie. Si noti tuttavia che il riferimento a "IValidateObject" nel blog deve essere "IValidatableObject".)

Miglioramenti all'iniezione delle dipendenze

ASP.NET MVC 3 offre un supporto migliore per l'applicazione della Dependency Injection (DI) e per l'integrazione con contenitori di Dependency Injection o Inversion of Control (IOC). Il supporto per Dependency Injection è stato aggiunto nelle aree seguenti:

  • Controller (registrazione e inserimento di controller factory, inserimento di controller).
  • Visualizzazioni (registrazione e inserimento di motori di visualizzazione, inserimento delle dipendenze nelle pagine di visualizzazione).
  • Filtri di azione (individuazione e iniezione di filtri).
  • Associatori di modelli (registrazione e inserimento).
  • Provider di convalida del modello (registrazione e inserimento).
  • Fornitori di metadati del modello (registrazione e inserimento).
  • Provider di valori (registrazione e inserimento).

MVC 3 supporta la libreria Common Service Locator e qualsiasi contenitore di inversione delle dipendenze che supporta l'interfaccia per quella libreria. Supporta anche una nuova interfaccia IDependencyResolver che semplifica l'integrazione dei framework DI.

Per altre informazioni sull'inserimento delle dipendenze in MVC 3, vedere le risorse seguenti:

Altre nuove funzionalità

Integrazione NuGet

ASP.NET MVC 3 installa automaticamente e abilita NuGet come parte della configurazione. NuGet è una gestione pacchetti open source gratuita che semplifica l'individuazione, l'installazione e l'uso di librerie e strumenti .NET nei progetti. Funziona con tutti i tipi di progetto di Visual Studio (inclusi ASP.NET Web Form e ASP.NET MVC).

NuGet consente agli sviluppatori che gestiscono progetti open source (ad esempio, progetti come Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks e Elmah) di creare pacchetti e registrarli in una raccolta online. È quindi facile per gli sviluppatori .NET che vogliono usare una di queste librerie per trovare il pacchetto e installarlo nei progetti su cui stanno lavorando.

Con l'aggiornamento degli strumenti di ASP.NET 3, i modelli di progetto includono librerie JavaScript preinstallate per i pacchetti NuGet, in modo che siano aggiornabili tramite NuGet. Entity Framework Code First è preinstallato anche come pacchetto NuGet.

Per altre informazioni su NuGet, vedere la documentazione di NuGet.

Cache dell'output di Pagina Parziale

ASP.NET MVC supporta la memorizzazione nella cache dell'output delle risposte a pagina completa dalla versione 1. MVC 3 supporta anche la memorizzazione nella cache dell'output parziale della pagina, che consente di memorizzare facilmente nella cache aree o frammenti di una risposta. Per altre informazioni sulla memorizzazione nella cache, vedere la sezione Partial Page Output Caching del blog post di Scott Guthrie sul candidato alla versione MVC 3 e la sezione Child Action Output Caching (Memorizzazione nella cache dell'output delle azioni figlio) delle note sulla versione di MVC 3.

Controllo granulare sulla convalida delle richieste

ASP.NET MVC ha la convalida predefinita delle richieste che consente di proteggere automaticamente dagli attacchi XSS e HTML injection. Tuttavia, a volte si vuole disabilitare in modo esplicito la convalida delle richieste, ad esempio se si vuole consentire agli utenti di pubblicare contenuto HTML (ad esempio, nelle voci di blog o nel contenuto CMS). È ora possibile aggiungere un attributo AllowHtml ai modelli o ai modelli di visualizzazione per disabilitare la convalida delle richieste in base alle proprietà durante l'associazione di modelli. Per altre informazioni sulla convalida delle richieste, vedere le risorse seguenti:

Finestra di dialogo Estendibile "Nuovo progetto"

In ASP.NET MVC 3 è possibile aggiungere modelli di progetto, motori di visualizzazione e framework di progetto unit test alla finestra di dialogo Nuovo progetto .

Miglioramenti all'impalcatura dei modelli

I modelli di scaffolding di ASP.NET MVC 3 identificano in modo più efficace le proprietà della chiave primaria nei modelli e le gestiscono in modo appropriato rispetto alle versioni precedenti di MVC. Ad esempio, i modelli di scaffolding ora assicurano che la chiave primaria non sia generata con scaffolding come un campo modulo modificabile.

Per impostazione predefinita, gli scaffolding Create and Edit ora utilizzano l'helper Html.EditorFor anziché l'helper Html.TextBoxFor. Ciò migliora il supporto per i metadati nel modello sotto forma di attributi di annotazione dati quando la finestra di dialogo Aggiungi visualizzazione genera una visualizzazione.

Nuovi overload per "Html.LabelFor" e "Html.LabelForModel"

Sono stati aggiunti nuovi overload dei metodi per i metodi di supporto LabelFor e LabelForModel. I nuovi overload consentono di specificare o sostituire il testo dell'etichetta.

Supporto del controller senza sessione

In ASP.NET MVC 3 è possibile indicare se si vuole che una classe controller usi lo stato della sessione e, in tal caso, se lo stato della sessione deve essere di lettura/scrittura o di sola lettura. Per altre informazioni sul supporto del controller senza sessione, vedere Note sulla versione di MVC 3.

Nuova classe "AdditionalMetadataAttribute"

È possibile usare l'attributo AdditionalMetadata per popolare il ModelMetadata.AdditionalValues dizionario per una proprietà del modello. Ad esempio, se un modello di visualizzazione ha una proprietà che deve essere visualizzata solo a un amministratore, è possibile annotare tale proprietà come illustrato nell'esempio seguente:

public class ProductViewModel 
{
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}

Questi metadati vengono resi disponibili per qualsiasi modello di visualizzazione o editor quando viene eseguito il rendering di un modello di visualizzazione prodotto. Spetta all'utente interpretare le informazioni sui metadati.

Miglioramenti di AccountController

Il modello di progetto AccountController in Internet è stato notevolmente migliorato.

Nuovo modello di progetto Intranet

È incluso un nuovo modello di progetto Intranet che abilita l'autenticazione di Windows e rimuove AccountController.