Leggere in inglese

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 usando modelli di progettazione ben stabiliti e la potenza di ASP.NET e .NET Framework.

Installa side-by-side con ASP.NET MVC 2, quindi iniziare a usarlo oggi!

Scaricare il programma di installazione qui

Funzionalità principali

  • Estendibile del sistema Scaffolding integrato tramite NuGet
  • Modelli di progetto abilitati per HTML 5
  • Visualizzazioni espressive, tra cui il nuovo motore di visualizzazione Razor
  • Potenti hook con l'inserimento delle dipendenze e i filtri di azione globali
  • Supporto JavaScript avanzato con javaScript non intrusivo, convalida jQuery e associazione JSON
  • Leggere l'elenco completo delle funzionalità riportate di seguito

Novità di ASP.NET MVC 3

Installazione e Guida

ASP.NET MVC 3 Overview

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:

Estendibile Scaffolding con l'integrazione di MvcScaffold

Il nuovo sistema Scaffolding semplifica la selezione e l'avvio dell'uso in modo produttivo se si è completamente nuovi al framework e per automatizzare le attività di sviluppo comuni se si è esperti e si sa già cosa si sta facendo.

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

  • Se si sta imparando ASP.NET MVC per la prima volta, perché offre un modo rapido per ottenere un codice utile, funzionante, che è quindi possibile modificare e adattare in base alle proprie esigenze. Ti salva dal trauma di guardare una pagina vuota e non hai idea dove iniziare!
  • Se si conosce ASP.NET MVC bene e ora si sta esplorando una nuova tecnologia di componente aggiuntivo , ad esempio un mapper relazionale a oggetti, un motore di visualizzazione, una libreria di test e così via, perché l'creatore di tale tecnologia potrebbe anche aver creato un pacchetto di scaffolding per esso.
  • Se il lavoro prevede ripetutamente la creazione di classi o file simili di un certo tipo, perché è possibile creare scaffolder personalizzati che esecutori di test di output, script di distribuzione o qualsiasi altra operazione necessaria. Anche tutti i membri del team possono usare gli scaffolder personalizzati.

Altre funzionalità in MvcScaffolding includono:

  • Supporto per progetti C# e VB
  • Supporto per i motori di visualizzazione Razor e ASPX
  • Supporta lo scaffolding in ASP.NET aree MVC e l'uso di layout/master di visualizzazione 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 diverse tecnologie (ad esempio, è disponibile un modello di prova per LINQ to SQL ora) e combinarli insieme

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

  • Aggiungi finestra di dialogo controller supporta ora lo scaffolding automatico completo delle azioni Create, Read, Update e Delete controller e delle visualizzazioni corrispondenti. Per impostazione predefinita, questo codice di accesso ai dati viene eseguito con EF Code First.
  • Aggiungi finestra di dialogo controller supporta gli scaffold estendibili tramite pacchetti NuGet, ad esempio MvcScaffolding. Ciò consente di collegare scaffold personalizzati nella finestra di dialogo che consente di creare scaffold per altre tecnologie di accesso ai dati, ad esempio NHibernate o anche JET con ODBCDirect, se si è così propensi!

Per altre informazioni sul 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 di compatibilità per i browser HTML 5 e CSS 3 a 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, che richiede 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 testate senza richiedere l'esecuzione dell'applicazione o l'avvio di un server Web.

Alcune nuove funzionalità di Razor includono quanto segue:

  • @model sintassi per specificare il tipo passato alla vista.
  • @* *@ sintassi dei commenti.
  • La 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 quanto segue:

  • Chart. Esegue il rendering di un grafico, offrendo le stesse funzionalità del controllo grafico in ASP.NET 4.
  • WebGrid. Esegue il rendering di una griglia di dati, completa con la funzionalità di paging e ordinamento.
  • Crypto. Usa gli algoritmi di hashing per creare password con sale e hash correttamente.
  • WebImage. Esegue il rendering di un'immagine.
  • WebMail. Invia 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 usare 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 Forms (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 questa operazione, ASP.NET filtri di azione forniti da MVC 2. I filtri di azione sono attributi personalizzati che forniscono un mezzo dichiarativo per aggiungere un comportamento pre-azione e post-azione a metodi di azione controller specifici. Tuttavia, in alcuni casi è possibile specificare il comportamento di pre-azione o post-azione che si applica a tutti i metodi di azione. MVC 3 consente di specificare filtri globali aggiungendoli alla GlobalFilters raccolta. Per altre informazioni sui filtri di azione globali, vedere le risorse seguenti:

Nuova proprietà "ViewBag"

I controller MVC 2 supportano una proprietà che consente di passare i dati a un modello di visualizzazione usando un'API ViewData dizionario con associazione tardiva. In MVC 3 è anche possibile usare una sintassi leggermente più semplice con la ViewBag proprietà per ottenere lo stesso scopo. Ad esempio, invece di scrivere , è possibile scrivere ViewData["Message"]="text"ViewBag.Message="text". Non è necessario definire classi fortemente tipizzata per usare la ViewBag proprietà. Poiché si tratta di una proprietà dinamica, è invece possibile ottenere o impostare le proprietà e le risolverà dinamicamente 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à è stata denominata la ViewModel proprietà.

Nuovi tipi "ActionResult"

I tipi seguenti ActionResult e i metodi helper corrispondenti sono nuovi o avanzati 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 trusivo. JavaScript unobtrusive evita l'inserimento inline di JavaScript in HTML. Ciò rende il codice HTML più piccolo e meno includo e semplifica lo scambio o la personalizzazione di librerie JavaScript. I 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 intrusivo usando un'impostazione di fileweb.config . Per altre informazioni sui miglioramenti di JavaScript e Ajax, vedere le risorse seguenti:

Client-Side convalida abilitata per impostazione predefinita

Nelle versioni precedenti di MVC è necessario chiamare in modo esplicito il metodo da una vista per abilitare la Html.EnableClientValidation convalida lato client. In MVC 3 questa operazione non è più necessaria 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 fare riferimento alle librerie jQuery e jQuery Validation appropriate nel sito. È possibile ospitare queste librerie nel proprio server o farvi riferimento da una rete di 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 plug-in di convalida remota jQuery. 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 specifica che la Remote convalida client chiamerà un'azione denominata UserNameAvailable nella 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 nella libreria MSDN.

Supporto dell'associazione JSON

ASP.NET MVC 3 include il supporto di binding JSON predefinito che consente ai metodi di azione di ricevere dati con codifica JSON e associarlo ai parametri del metodo action. 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 nel server che inviano e ricevono dati JSON. Per altre informazioni sul supporto dell'associazione JSON, vedere la sezione Miglioramenti JavaScript e AJAXdel post di blog MVC 3 Preview di Scott Guthrie.

Miglioramenti alla convalida dei modelli

Attributi dei metadati "DataAnnotations"

ASP.NET MVC 3 supporta DataAnnotations gli attributi dei metadati, DisplayAttributead esempio .

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 che viene convalidato. 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 valida.

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 recupera ora gli errori dall'interfaccia quando l'associazione di modelli e contrassegna o evidenzia automaticamente i campi interessati all'interno IValidatableObject di una visualizzazione usando gli helper del modulo HTML predefiniti.

L'interfaccia IClientValidatable consente ASP.NET MVC di individuare in fase di esecuzione se un validator ha il supporto per 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 Miglioramenti della convalida dei modellidel post di blog MVC 3 Preview di Scott Guthrie. Si noti tuttavia che il riferimento a "IValidateObject" nel blog deve essere "IValidatableObject".

Miglioramenti dell'inserimento delle dipendenze

ASP.NET MVC 3 offre un supporto migliore per l'applicazione dei contenitori di inserimento delle dipendenze (DI) e per l'integrazione con i contenitori di inserimento delle dipendenze o inversione del controllo (IOC). Il supporto per DI è stato aggiunto nelle aree seguenti:

  • Controller (registrazione e inserimento di controller factory, inserimento di controller).
  • Visualizzazioni (registrazione e inserimento di motori di visualizzazione, inserimento di dipendenze nelle pagine di visualizzazione).
  • Filtri azione (individuazione e inserimento di filtri).
  • Bindinger del modello (registrazione e inserimento).
  • Provider di convalida del modello (registrazione e inserimento).
  • Provider 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 che supporta l'interfaccia della IServiceLocator libreria. Supporta anche una nuova IDependencyResolver interfaccia che semplifica l'integrazione di framework DI.

Per altre informazioni su DI 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 la ricerca, l'installazione e l'uso di librerie e strumenti .NET nei progetti. Funziona con tutti i tipi di progetto di Visual Studio, inclusi Web Forms ASP.NET 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) per 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 in cui funzionano.

Con l'aggiornamento degli strumenti ASP.NET 3, i modelli di progetto includono librerie JavaScript preinstallate, pertanto sono aggiornabili tramite NuGet. Entity Framework Code First è anche preinstallato come pacchetto NuGet.

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

memorizzazione nella cache di output Partial-Page

ASP.NET MVC ha supportato la memorizzazione nella cache di output delle risposte a pagina completa dalla versione 1. MVC 3 supporta anche la memorizzazione nella cache dell'output a pagina parziale, che consente di memorizzare facilmente nella cache aree o frammenti di una risposta. Per altre informazioni sulla memorizzazione nella cache, vedere la sezione Memorizzazione nella cache di output pagina parziale del post di blog di Scott Guthrie sul candidato alla versione MVC 3 e la sezione Memorizzazione nella cache dell'output azione 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 da attacchi XSS e HTML injection. Tuttavia, a volte si vuole disabilitare in modo esplicito la convalida della richiesta, ad esempio se si vuole consentire agli utenti di pubblicare contenuto HTML(ad esempio, nelle voci di blog o contenuto CMS). È ora possibile aggiungere un attributo AllowHtml ai modelli o visualizzare modelli per disabilitare la convalida delle richieste in base alla 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, visualizzare motori e framework di progetto unit test alla finestra di dialogo Nuovo progetto .

Miglioramenti di Scaffolding dei modelli

ASP.NET modelli di scaffolding MVC 3 eseguono un processo migliore per identificare le proprietà chiave primaria nei modelli e gestirle in modo appropriato rispetto alle versioni precedenti di MVC. Ad esempio, i modelli di scaffolding ora assicurarsi che la chiave primaria non sia scaffolded come campo modulo modificabile.

Per impostazione predefinita, creare e modificare le scaffold ora usano l'helper anziché l'helper Html.EditorForHtml.TextBoxFor . Questo migliora il supporto per i metadati nel modello sotto forma di attributi di annotazione dei dati quando la finestra di dialogo Aggiungi visualizzazione genera una visualizzazione.

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

Sono stati aggiunti nuovi overload del metodo per i LabelFor metodi helper e LabelForModel . I nuovi overload consentono di specificare o eseguire l'override del 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 sola 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à 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. È possibile interpretare le informazioni sui metadati.

Miglioramenti di AccountController

Il modello di progetto Internet AccountController è stato notevolmente migliorato.

Nuovo modello di progetto Intranet

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