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
- 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
- Phil Haack: ASP.NET MVC 3 rilasciato
- Scott Hanselman: ASP.NET MVC3, WebMatrix, NuGet, IIS Express e Orchard rilasciata - Versione Web di gennaio Microsoft nel contesto
- Scott Guthrie: annuncio della versione di ASP.NET MVC 3, IIS Express, SQL CE 4, Web Farm Framework, Orchard, WebMatrix
- Note sulla versione per ASP.NET MVC 3
Installazione e Guida
- Installare ASP.NET MVC 3 usando Il programma di installazione della piattaforma Web (consigliato)
- Installare ASP.NET MVC 3 usando il file eseguibile del programma di installazione
- Installare ASP.NET MVC 3 per Visual Studio 11 Developer Preview
- Leggere l'esercitazione Introduzione a ASP.NET MVC 3
- Ottenere assistenza e discutere ASP.NET MVC 3 nei forum
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
- Modelli di progetto abilitati per HTML 5
- Motore di visualizzazione Razor
- Supporto per più motori di visualizzazione
- Miglioramenti del controller
- JavaScript e Ajax
- Miglioramenti alla convalida dei modelli
- Miglioramenti dell'inserimento delle dipendenze
- Altre nuove funzionalità
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:
La serie post di Steve Sanderson, tra cui:
Il post di Scott Hanselman dalla sua sessione PDC 2010 Building a Blog with Microsoft "Unnamed Package of Web Love"
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.
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:
- Post di blog di Scott Guthrie che introduce Razor
- Scott Guthrie's blog post introducing the @model keyword
- Post di blog di Scott Guthrie che introduce i layout Razor
- Informazioni di riferimento rapido sulle API Razor
- Note sulla versione di MVC 3
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.
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:
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à.
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
,RedirectToRoutePermanent
eRedirectToActionPermanent
. Questi metodi restituiscono un'istanza diRedirectResult
con laPermanent
proprietà impostata sutrue
. - HttpStatusCodeResult. Restituisce un codice di stato HTTP specificato dall'utente.
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:
- Introduzione di base a JavaScript non intrusivo nel sito Di Wikipedia
- Post JavaScript unobtrusive di Brad Wilson
- Post di convalida JavaScript unobtrusive di Brad Wilson
- Creazione di un'applicazione MVC 3 con Razor e Unobtrusive JavaScript (esercitazione sul sito di ASP.NET)
- Note sulla versione di MVC 3
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.
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.
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.
ASP.NET MVC 3 supporta DataAnnotations
gli attributi dei metadati, DisplayAttribute
ad esempio .
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; }
}
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".
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:
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.
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.
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:
- La sezione JavaScript e convalida unobtrusive nel post di blog di Scott Guthrie sul candidato alla versione MVC 3.
- Note sulla versione di MVC 3
In ASP.NET MVC 3 è possibile aggiungere modelli di progetto, visualizzare motori e framework di progetto unit test alla finestra di dialogo Nuovo progetto .
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.EditorFor
Html.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.
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.
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.
È 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.
Il modello di progetto Internet AccountController è stato notevolmente migliorato.
È incluso un nuovo modello di progetto Intranet che abilita l'autenticazione di Windows e rimuove AccountController.