note sulla versione ASP.NET MVC 3

Panoramica

Questo documento descrive la versione di ASP.NET MVC 3 RTM per Visual Studio 2010. ASP.NET MVC è un framework per lo sviluppo di applicazioni Web che usano il modello Model-View-Controller (MVC). Il programma di installazione di ASP.NET MVC 3 include i componenti seguenti:

  • ASP.NET componenti di runtime MVC 3
  • ASP.NET strumenti di Visual Studio 2010 MVC 3
  • Pagine Web ASP.NET componenti di runtime
  • strumenti Pagine Web ASP.NET Visual Studio 2010
  • Microsoft Package Manager per .NET (NuGet)
  • Aggiornamento per Visual Studio 2010 che abilita il supporto per la sintassi Razor. Per informazioni dettagliate, vedere l'articolo di KnowledgeBase 2483190.

L'insieme completo di note sulla versione per tutte le versioni preliminari di ASP.NET MVC 3 è disponibile nel sito Web ASP.NET all'URL seguente:

https://www.asp.net/learn/whitepapers/mvc3-release-notes

Note di installazione

Per installare ASP.NET MVC 3 RTM usando Web Platform Installer (Web PI), visitare la pagina seguente:

https://www.microsoft.com/web/gallery/install.aspx?appid=MVC3

In alternativa, è possibile scaricare il programma di installazione per ASP.NET MVC 3 RTM per Visual Studio 2010 dalla pagina seguente:

https://go.microsoft.com/fwlink/?LinkID=208140

ASP.NET MVC 3 può essere installato e può essere eseguito side-by-side con ASP.NET MVC 2.

Requisiti software

I componenti runtime di ASP.NET MVC 3 richiedono il software seguente:

  • .NET Framework versione 4.

    Gli strumenti di Visual Studio 2010 per ASP.NET MVC 3 richiedono il software seguente:

  • Visual Studio 2010 o Visual Web Developer 2010 Express.

Documentazione

La documentazione per ASP.NET MVC è disponibile nel sito Web MSDN nell'URL seguente:

https://go.microsoft.com/fwlink/?LinkId=205717

Le esercitazioni e altre informazioni su ASP.NET MVC sono disponibili nella pagina MVC del sito Web di ASP.NET all'URL seguente:

https://www.asp.net/mvc/

Supporto tecnico

Si tratta di una versione completamente supportata. Le informazioni su come ottenere supporto tecnico sono disponibili nel sito Web supporto tecnico Microsoft.

È inoltre possibile pubblicare domande relative a tale versione nel forum di ASP.NET MVC, dove i membri della community ASP.NET possono fornire di frequente un supporto informale:

https://forums.asp.net/1146.aspx

Aggiornamento di un progetto MVC 2 ASP.NET a ASP.NET aggiornamento degli strumenti MVC 3

ASP.NET MVC 3 può essere installato side-by-side con ASP.NET MVC 2 nello stesso computer, che offre flessibilità nella scelta di quando aggiornare un'applicazione ASP.NET MVC 2 a ASP.NET MVC 3.

Per aggiornare manualmente un'applicazione ASP.NET MVC 2 esistente alla versione 3, effettuare le operazioni seguenti:

  1. Creare un nuovo progetto ASP.NET MVC 3 vuoto nel computer in uso. Tale progetto conterrà alcuni file necessari per l'aggiornamento.

  2. Copiare i file seguenti dal progetto ASP.NET MVC 3 nel percorso corrispondente del progetto ASP.NET MVC 2. Sarà necessario aggiornare tutti i riferimenti alla libreria jQuery per tenere conto del nuovo nome file ( jQuery-1.5.1.js):

    • /Views/Web.config
    • /packages.config
    • /scripts/*.js
    • /Content/themes/*.*
  3. Copiare la cartella packages nella radice della soluzione di progetto ASP.NET MVC 3 vuota nella radice della soluzione, che si trova nella directory in cui si trova il file sln della soluzione.

  4. Se il progetto MVC 2 ASP.NET contiene aree, copiare il file /Views/Web.config nella cartella Views di ogni area.

  5. In entrambi i file Web.config del progetto ASP.NET MVC 2 cercare e sostituire globalmente la versione ASP.NET MVC. Individuare la stringa seguente:

    System.Web.Mvc, Version=2.0.0.0
    

    Sostituirlo con quanto riportato di seguito:

    System.Web.Mvc, Version=3.0.0.0
    
  6. In Esplora soluzioni eliminare il riferimento a System.Web.Mvc (che punta alla DLL dalla versione 2), quindi aggiungere un riferimento a System.Web.Mvc (v3.0.0.0).

  7. Aggiungere un riferimento a System.Web.WebPages.dll e System.Web.Helpers.dll. Questi assembly si trovano nelle cartelle seguenti:

    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET MVC 3\Assemblies
    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
  8. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto e scegliere Scarica progetto. Fare di nuovo clic con il pulsante destro del mouse sul nome del progetto e scegliere Modifica NomeProgetto.csproj.

  9. Individuare l'elemento ProjectTypeGuids e sostituire {F85E285D-A4E0-4152-9332-AB1D724D3325} con {E53F8FEA-EAE0-44A6-8774-FFD645390401}.

  10. Salvare le modifiche, fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Ricarica progetto.

  11. Nel file di Web.config radice dell'applicazione aggiungere le impostazioni seguenti alla sezione assembly .

    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, 
         PublicKeyToken=31BF3856AD364E35" />
    
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral,
         PublicKeyToken=31BF3856AD364E35" />
    
  12. Se il progetto fa riferimento a qualsiasi libreria di terze parti compilata usando ASP.NET MVC 2, aggiungere l'elemento bindingRedirect evidenziato seguente al file Web.config nella radice dell'applicazione nella sezione di configurazione :

    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
           <assemblyIdentity name="System.Web.Mvc"
               publicKeyToken="31bf3856ad364e35"/>
           <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/>
         </dependentAssembly>
       </assemblyBinding>
    </runtime>
    

Modifiche apportate ad ASP.NET MVC 3 Tools Update

In questa sezione vengono illustrate le modifiche apportate nella versione di ASP.NET MVC 3 Tools Update rispetto alla versione ASP.NET MVC 3 RTM.

La finestra di dialogo "Aggiungi controller" supporta ora lo scaffolding dei controller con visualizzazioni e codice di accesso ai dati

Lo scaffolding consente di generare rapidamente un controller e le visualizzazioni per l'applicazione. Dopo aver generato il codice, è possibile modificarlo per soddisfare i requisiti del progetto.

Per avviare la finestra di dialogo Aggiungi controller in ASP.NET MVC 3, fare clic con il pulsante destro del mouse sulla cartella Controller in Esplora soluzioni, scegliere Aggiungi e quindi fare clic su Controller. La finestra di dialogo è stata migliorata per offrire ulteriori opzioni di scaffolding.

Screenshot della finestra di dialogo Aggiungi controller.

Per impostazione predefinita, sono disponibili tre modelli di scaffolding.

Svuota controller

Questo modello genera un file del controller vuoto. Questo modello equivale a non selezionare Aggiungi azioni per creare, modificare, dettagli, eliminare scenari nelle versioni precedenti di ASP.NET MVC. Se si sceglie questa opzione, non saranno disponibili ulteriori opzioni.

Controller con azioni di lettura/scrittura vuote

Questo modello genera un file del controller contenente tutti i metodi di azione richiesti ma senza includere il codice di implementazione nei metodi. Questo modello equivale a selezionare Aggiungi azioni per creare, modificare, dettagli, eliminare scenari nelle versioni precedenti di ASP.NET MVC. Se si sceglie questa opzione, non saranno disponibili ulteriori opzioni.

Controller con visualizzazioni e azioni di lettura/scrittura, mediante Entity Framework

Questo modello consente di creare rapidamente un'interfaccia utente di lavoro per l'immissione dati. Genera il codice che gestisce i diversi requisiti e scenari comuni, ad esempio:

  • Accesso ai dati. Il codice generato legge e scrive le entità in un database. Funziona con l'approccio Code First di Entity Framework se si sceglie una classe di contesto dati esistente o se si consente al modello di generare una nuova classe DbContext . Funziona anche con l'approccio Entity Framework Database First o Model First se si sceglie una classe ObjectContext esistente.

  • Convalida. Il codice generato utilizza le funzionalità dei metadati e dell'associazione del modello ASP.NET MVC in modo tale che l'invio dei form venga convalidato in base alle regole dichiarate nella classe di modello. Sono incluse le regole di convalida predefinite, ad esempio gli attributi Required e StringLength e le regole di convalida personalizzate.

  • Relazioni uno-a-molti. Se si definiscono relazioni di chiavi esterne uno-a-molti tra le classi di modello, il codice generato produrrà elenchi a discesa per la selezione delle entità correlate. È possibile ad esempio definire le classi di modello seguenti in base alle convenzioni Entity Framework Code First:

    public class Product
    {
         public int ProductId { get; set; }
         [Required]
         public string Name { get; set; }
    
         // Product belongs to Category
         public int CategoryId { get; set; }
         public virtual Category Category { get; set; }
    }
    public class Category
    {
         public int CategoryId { get; set; }
         [Required]
         public string Name { get; set; }
    }
    

    Quando si esegue lo scaffolding di un controller per la classe Product , le relative visualizzazioni consentiranno agli utenti di scegliere un oggetto Category per ogni istanza di Product .

    Questo modello abilita opzioni aggiuntive nella finestra di dialogo Aggiungi controller . Per la classe Model è possibile scegliere qualsiasi classe di modello nella soluzione, che determina il tipo di dati che gli utenti potranno creare o modificare:

  • Se si desidera utilizzare Entity Framework Code First, è possibile scegliere qualsiasi classe di modello.

  • Se si utilizza Entity Framework Database First o Entity Framework Model First, scegliere una classe di entità definita nel modello concettuale.

Per la classe Contesto dati, è possibile effettuare queste scelte:

  • Se si vuole usare Code First e non si dispone di una classe di contesto dati esistente, scegliere **Nuovo contesto dati **. Verrà quindi generata una classe del contesto dati.
  • Se si desidera utilizzare Code First e si dispone di una classe del contesto dati esistente, è possibile sceglierla in questa finestra. Verrà aggiornata in modo da rendere persistente la classe di modello selezionata.
  • Se si utilizza Database First o Model First, scegliere nella finestra la classe di contesto dell'oggetto.

Per Visualizzazioni scegliere il motore di visualizzazione che si desidera utilizzare o scegliere Nessuno se non si desidera eseguire lo scaffolding di alcuna visualizzazione.

È possibile selezionare Opzioni avanzate per specificare altre opzioni per le visualizzazioni generate. È possibile ad esempio scegliere il layout o la pagina master da utilizzare.

Miglioramenti alla finestra di dialogo "Nuovo progetto ASP.NET MVC 3"

La finestra di dialogo utilizzata per creare nuovi progetti ASP.NET MVC 3 include più miglioramenti, come illustrato di seguito.

Screenshot della finestra di dialogo nuovo progetto. L'icona Dell'applicazione Intranet e la casella di controllo Usa markup semantico H T M L 5 sono evidenziati.

"Nuovo modello per il progetto intranet"

L'elenco Modello di progetto include un nuovo modello Applicazione Intranet. Questo modello contiene le impostazioni per la compilazione di un'applicazione Web mediante l'autenticazione di Windows anziché l'autenticazione basata su form. Poiché un'applicazione Intranet richiede alcune impostazioni IIS che non possono essere incapsulate in un modello di progetto, il modello include un file leggimi con le istruzioni per il funzionamento del modello di progetto in IIS. La documentazione per il nuovo modello di applicazione Intranet è disponibile nel sito Web MSDN all'URL seguente:

https://msdn.microsoft.com/library/gg703322(VS.98).aspx

I modelli di progetto sono ora abilitati per HTML5

La finestra di dialogo per un nuovo progetto contiene ora un'opzione per aggiungere ai modelli di progetto le funzionalità specifiche di HTML5. Se si seleziona l'opzione, le visualizzazioni vengono generate che contengono i nuovi elementi HTML5 <header>, <footer>e <navigation> .

Tenere presente che le versioni precedenti di browser non supportano i tag specifici di HTML5. Per risolvere tale limitazione, i modelli di progetto HTML5 includono un riferimento alla libreria Modernizr Vedere la sezione successiva.

I modelli di progetto includono ora Modernizr 1.7

Modernizr è una libreria JavaScript che consente il supporto di CSS 3 e HTML5 nei browser che non supportano ancora tali funzionalità. Questa libreria viene inclusa come pacchetto NuGet preinstallato nei modelli per i progetti ASP.NET MVC 3. Per altre informazioni su Modernizr, vedere http://www.modernizr.com/.

I modelli di progetto includono le versioni aggiornate di jQuery, jQuery UI e jQuery Validation

I modelli di progetto includono ora le versioni seguenti degli script jQuery:

  • jQuery 1.5.1
  • jQuery Validation 1.8
  • jQuery UI 1.8.11

Queste librerie vengono incluse come pacchetti NuGet preinstallati.

I modelli di progetto includono ora ADO.NET Entity Framework 4.1 come pacchetto NuGet preinstallato

ADO.NET Entity Framework 4.1 include la funzionalità Code First. Code First è un nuovo modello di sviluppo per ADO.NET Entity Framework che fornisce un'alternativa ai modelli Database First e Model First esistenti.

Code First è incentrato sulla definizione del modello mediante le classi POCO (Plain Old CLR Object) scritte in Visual Basic o C#. Queste classi possono quindi essere mappate a un database esistente o essere utilizzate per generare uno schema di database. È possibile fornire una configurazione aggiuntiva usando gli attributi DataAnnotations o le API Fluent.

La documentazione per l'uso di Code Firstwith ASP.NET MVC è disponibile nel sito Web di ASP.NET negli URL seguenti:

https://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part1-cs https://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

I modelli di progetto includono le librerie JavaScript come pacchetti NuGet preinstallati

Quando si crea un nuovo progetto ASP.NET MVC 3, esso include i file JavaScript citati in precedenza, ad esempio la libreria Modernizr, installandoli mediante NuGet anziché aggiungendo direttamente gli script alla cartella Scripts nel contenuto dei modelli di progetto. In questo modo è possibile utilizzare NuGet per aggiornare gli script alla versione più recente quando vengono rilasciate le nuove versioni degli script.

Considerando ad esempio la frequenza con cui vengono rilasciate le nuove versioni di jQuery, la versione di jQuery inclusa nel modello di progetto può diventare presto obsoleta. Tuttavia, poiché jQuery è incluso come pacchetto NuGet installato, l'utente verrà informato mediante la finestra di dialogo NuGet quando saranno disponibili versioni più recenti di jQuery.

Poiché jQuery include il numero di versione nel nome del file, l'aggiornamento di jQuery alla versione più recente richiede anche l'aggiornamento del <script> tag che fa riferimento al file jQuery per usare il nuovo nome file. Le altre librerie di script incluse non contengono il numero di versione nel nome dello script, pertanto possono essere aggiornate più facilmente alle versioni più recenti.

Problemi noti in ASP.NET MVC 3

  • In alcuni casi, l'installazione potrebbe non riuscire con il messaggio di errore "Installazione non riuscita con codice di errore (0x80070643)". Per informazioni su come risolvere questo problema, vedere l'articolo della Knowledge Base 2531566.
  • Lo scaffolding per l'aggiunta di un controller non prevede lo scaffolding delle entità che sfruttano il supporto dell'ereditarietà delle entità all'interno di Entity Framework. Ad esempio, data una classe Person di base ereditata da una classe Student , lo scaffolding della classe Student genererà codice generato che non viene compilato.
  • La creazione di un nuovo progetto ASP.NET MVC 3 all'interno di una cartella della soluzione causa un errore NullReferenceException . Per risolvere questo problema, creare il progetto ASP.NET MVC 3 nella directory radice della soluzione e quindi spostarlo nella cartella della soluzione.
  • IntelliSense per la sintassi Razor non funziona quando è installato ReSharper. Se ReSharper è installato e si vuole sfruttare il supporto di Razor IntelliSense in ASP.NET MVC 3, vedere la voce Razor Intellisense e ReSharper nel blog di Hadi Hariri, che illustra i modi per usarli insieme oggi.
  • Durante l'installazione la finestra di dialogo per l'accettazione delle condizioni di licenza è più piccola di quella prevista.
  • Quando si modifica una visualizzazione Razor (con estensione cshtml o .file vbhtml ), visualizzazioni. ASP.NET MVC 3 non include frammenti di codice per le visualizzazioni Razor. aspxselecting a code snippet for ASP.NET MVC will show snippets for
  • Se si installa ASP.NET MVC 3 per Visual Web Developer Express in un computer in cui Visual Studio non è installato e successivamente si installa Visual Studio, è necessario reinstallare ASP.NET MVC 3. Visual Studio e Visual Web Developer Express condividono i componenti aggiornati dal programma di installazione di ASP.NET MVC 3. Lo stesso problema si verifica se si installa ASP.NET MVC 3 per Visual Studio in un computer in cui non è installato Visual Web Developer Express e quindi si installa Visual Web Developer Express successivamente.

Modifiche in ASP.NET MVC 3 RTM

Questa sezione descrive le modifiche e le correzioni di bug apportate nella versione ASP.NET MVC 3 RTM dalla versione RC2.

Modifica: aggiornata la versione dell'interfaccia utente di jQuery alla versione 1.8.7

I ASP.NET modelli di progetto MVC per Visual Studio sono stati aggiornati per includere la versione più recente della libreria dell'interfaccia utente jQuery. I modelli includono anche il set minimo di file di risorse richiesti dall'interfaccia utente di jQuery, ad esempio i file CSS e immagine associati.

Modifica: è stato modificato il valore predefinito ModelMetadataProvider in DataAnnotationsModelMetadataProvider

La versione RC2 di ASP.NET MVC 3 ha introdotto una classe CachedDataAnnotationsMetadataProvider che ha fornito la memorizzazione nella cache sopra la classe DataAnnotationsModelMetadataProvider esistente come miglioramento delle prestazioni. Tuttavia, alcuni bug sono stati segnalati con questa implementazione, quindi la modifica è stata ripristinata e spostata nel progetto Futures MVC, disponibile in ASP.NET WebStack.

Corretto: incollando parte di un'espressione Razor che contiene spazi vuoti, viene invertito

Nelle versioni non definitive di ASP.NET MVC 3, quando si incolla una parte di un'espressione Razor che contiene spazi vuoti in un file Razor, l'espressione risultante viene invertita. Si consideri ad esempio il blocco di codice Razor seguente:

@SomeMethod("first param",
100)
@AnotherMethod()

Se si seleziona il testo "first param" nel primo metodo e lo si incolla come argomento nel secondo metodo, il risultato è il seguente:

@AnotherMethod(param""first)

Il comportamento corretto è che l'operazione incolla dovrebbe comportare quanto segue:

@AnotherMethod("first param")

Questo problema è stato risolto nella versione RTM in modo che l'espressione venga mantenuta correttamente durante l'operazione incolla.

Correzione: la ridenominazione di un file Razor aperto nell'editor disabilita la colorazione della sintassi e IntelliSense

La ridenominazione di un file Razor usando Esplora soluzioni mentre il file viene aperto nella finestra dell'editor causa l'evidenziazione della sintassi e IntelliSense smette di funzionare per tale file. Questo problema è stato risolto in modo che l'evidenziazione e IntelliSense vengano mantenute dopo una ridenominazione.

Problemi noti per ASP.NET MVC 3 RTM

  • Se si chiude Visual Studio 2010 SP1 Beta mentre la console di Gestione pacchetti NuGet è aperta, Visual Studio si arresta in modo anomalo e tenta di riavviare. Questo problema verrà risolto nella versione RTM di Visual Studio 2010 SP1.
  • Il programma di installazione di ASP.NET MVC 3 è in grado di installare solo una versione iniziale della gestione pacchetti NuGet. Dopo aver installato la versione iniziale, NuGet può essere installato e aggiornato usando Gestione estensioni di Visual Studio. Se NuGet è già installato, passare alla raccolta di estensioni di Visual Studio per eseguire l'aggiornamento alla versione più recente di NuGet.
  • La creazione di un nuovo progetto ASP.NET MVC 3 all'interno di una cartella della soluzione causa un errore NullReferenceException . Per risolvere questo problema, creare il progetto ASP.NET MVC 3 nella directory radice della soluzione e quindi spostarlo nella cartella della soluzione.
  • Il completamento del programma di installazione potrebbe richiedere molto più tempo rispetto alle versioni precedenti di ASP.NET MVC. Questo perché aggiorna i componenti di Visual Studio 2010.
  • IntelliSense per la sintassi Razor non funziona quando è installato ReSharper. Se ReSharper è installato e si vuole sfruttare il supporto di Razor IntelliSense in ASP.NET MVC 3, vedere la voce Razor Intellisense e ReSharper nel blog di Hadi Hariri, che illustra i modi per usarli insieme oggi.
  • Le viste CCSHTML e VBHTML create con la versione beta di ASP.NET MVC 3 non hanno impostato correttamente l'azione di compilazione, con il risultato che questi tipi di visualizzazione vengono omessi quando il progetto viene pubblicato. Il valore azione di compilazione per questi file deve essere impostato su "Contenuto". ASP.NET MVC 3 RTM risolve questo problema per i nuovi file, ma non corregge l'impostazione per i file esistenti per un progetto creato con versioni non definitive.
  • Screenshot della finestra di dialogo proprietà con il menu azione di compilazione aperto. L'opzione contenuto è selezionata.
  • Durante l'installazione la finestra di dialogo per l'accettazione delle condizioni di licenza è più piccola di quella prevista.
  • Quando si modifica una visualizzazione Razor (file con estensione cshtml), la voce di menu Vai al controller in Visual Studio non sarà disponibile e non sono presenti frammenti di codice.
  • Se si installa ASP.NET MVC 3 per Visual Web Developer Express in un computer in cui Visual Studio non è installato e successivamente si installa Visual Studio, è necessario reinstallare ASP.NET MVC 3. Visual Studio e Visual Web Developer Express condividono i componenti aggiornati dal programma di installazione di ASP.NET MVC 3. Lo stesso problema si verifica se si installa ASP.NET MVC 3 per Visual Studio in un computer in cui non è installato Visual Web Developer Express e quindi si installa Visual Web Developer Express successivamente.

Modifiche di rilievo in ASP.NET MVC 3

  • Nelle versioni precedenti di ASP.NET MVC, i filtri azione vengono creati per richiesta, ad eccezione di alcuni casi. Questo comportamento non è mai stato un comportamento garantito, ma solo un dettaglio di implementazione e il contratto per i filtri era di considerarli senza stato. In ASP.NET MVC 3, i filtri vengono memorizzati nella cache in modo più aggressivo. Pertanto, qualsiasi filtro azione personalizzato che archivia in modo non corretto lo stato dell'istanza potrebbe essere interrotto.
  • L'ordine di esecuzione per i filtri eccezioni è stato modificato per i filtri delle eccezioni con lo stesso valore Order . In ASP.NET MVC 2 e versioni precedenti, i filtri delle eccezioni nel controller con lo stesso valore Order di quelli di un metodo di azione vengono eseguiti prima dei filtri delle eccezioni nel metodo di azione. Ciò si verifica in genere quando i filtri delle eccezioni vengono applicati senza un valore Order specificato. In ASP.NET MVC 3 questo ordine è stato invertito in modo che il gestore di eccezioni più specifico venga eseguito per primo. Come nelle versioni precedenti, se la proprietà Order viene specificata in modo esplicito, i filtri vengono eseguiti nell'ordine specificato.
  • È stata aggiunta una nuova proprietà denominata FileExtensions alla classe di base VirtualPathProviderViewEngine . Quando ASP.NET cerca una visualizzazione per percorso (non per nome), vengono considerate solo le visualizzazioni con estensione di file contenuta nell'elenco specificato da questa nuova proprietà. Si tratta di una modifica che causa un'interruzione nelle applicazioni in cui viene registrato un provider di compilazione personalizzato per abilitare un'estensione di file personalizzata per le visualizzazioni Web Form e in cui il provider fa riferimento a tali visualizzazioni usando un percorso completo anziché un nome. La soluzione alternativa consiste nel modificare il valore della proprietà FileExtensions per includere l'estensione di file personalizzata.
  • Le implementazioni della factory del controller personalizzato che implementano direttamente l'interfaccia IControllerFactory devono fornire un'implementazione del nuovo metodo GetControllerSessionBehavior aggiunto all'interfaccia in questa versione. In generale, è consigliabile non implementare direttamente questa interfaccia e derivare invece la classe da DefaultControllerFactory.

Modifiche in ASP.NET MVC 3 RC2

Questa sezione descrive le modifiche (nuove funzionalità e correzioni di bug) apportate nella versione ASP.NET MVC 3 RC2 dopo la versione RC.

Modelli di progetto modificati per includere jQuery 1.4.4, jQuery Validation 1.7 e jQuery UI 1.8.6

I modelli di progetto per ASP.NET MVC 3 includono ora le versioni più recenti di jQuery, jQuery Validation e jQuery UI. L'interfaccia utente di jQuery è una nuova aggiunta ai modelli di progetto e fornisce widget utili dell'interfaccia utente. Per altre informazioni sull'interfaccia utente di jQuery, visitare la home page: http://jqueryui.com/.

Aggiunta della classe "AdditionalMetadataAttribute"

È possibile utilizzare la classe AdditionalMetadataAttribute per popolare il dizionario ModelMetadata.AdditionalValues per una proprietà del modello.

Si supponga, ad esempio, che un modello di visualizzazione abbia proprietà che devono essere visualizzate solo a un amministratore. Tale modello può essere annotato con il nuovo attributo usando AdminOnly come chiave e true come valore, come 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 come sviluppatore di applicazioni interpretare le informazioni sui metadati.

Miglioramento dello scaffolding della visualizzazione

I modelli T4 usati per eseguire lo scaffolding delle viste ora generano chiamate a metodi helper modello come EditorFor anziché helper come TextBoxFor. Questa modifica 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.

Lo scaffolding Aggiungi visualizzazione include anche il rilevamento e l'utilizzo migliorate delle informazioni sulla chiave primaria sul modello, in base alla convenzione. Ad esempio, la finestra di dialogo Aggiungi visualizzazione utilizza queste informazioni per assicurarsi che il valore della chiave primaria non sia sottoposto a scaffolding come campo modulo modificabile.

I modelli di modifica e creazione predefiniti includono riferimenti agli script jQuery necessari per la convalida client.

Aggiunta del metodo Html.Raw

Per impostazione predefinita, il motore di visualizzazione Razor codifica HTML tutti i valori. Ad esempio, il frammento di codice seguente codifica il codice HTML all'interno della variabile greeting in modo che venga visualizzato nella pagina come <strong>Hello World!</strong>.

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@greeting</p>

Il nuovo metodo Html.Raw consente di visualizzare in modo semplice il codice HTML non codificato quando il contenuto è noto per essere sicuro. Nell'esempio seguente viene visualizzata la stessa stringa, ma viene eseguito il rendering della stringa come markup:

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@Html.Raw(greeting)</p>

Proprietà "Controller.ViewModel" rinominata e proprietà "View" in "ViewBag"

In precedenza, la proprietà ViewModel del controller corrisponde alla proprietà View di una vista. Entrambe queste proprietà offrono un modo per accedere ai valori dell'oggetto ViewDataDictionary usando la sintassi della funzione di accesso alla proprietà dinamica. Entrambe le proprietà sono state rinominate come uguali per evitare confusione e per essere più coerenti.

Classe "ControllerSessionStateAttribute" rinominata in "SessionStateAttribute"

La classe ControllerSessionStateAttribute è stata introdotta nella versione RC di ASP.NET MVC 3. La proprietà è stata rinominata più succinte.

Proprietà RemoteAttribute "Fields" rinominata in "AdditionalFields"

La proprietà Fields della classe RemoteAttribute ha causato una confusione tra gli utenti. La ridenominazione di questa proprietà in AdditionalFields chiarisce la finalità.

Rinominato "SkipRequestValidationAttribute" in "AllowHtmlAttribute"

L'attributo SkipRequestValidationAttribute è stato rinominato in AllowHtmlAttribute per rappresentare meglio l'utilizzo previsto.

Metodo "Html.ValidationMessage" modificato per visualizzare il primo messaggio di errore utile

Il metodo Html.ValidationMessage è stato risolto per visualizzare il primo messaggio di errore utile anziché visualizzare semplicemente il primo errore.

Durante l'associazione di modelli, il dizionario ModelState può essere popolato da più origini con messaggi di errore sulla proprietà, incluso dal modello stesso (se implementa IValidatableObject), dagli attributi di convalida applicati alla proprietà e dalle eccezioni generate durante l'accesso alla proprietà.

Quando il metodo Html.ValidationMessage visualizza un messaggio di convalida, ignora le voci sullo stato del modello che includono un'eccezione, perché in genere non sono destinate all'utente finale. Il metodo cerca invece il primo messaggio di convalida che non è associato a un'eccezione e visualizza tale messaggio. Se non viene trovato alcun messaggio di questo tipo, viene predefinito un messaggio di errore generico associato alla prima eccezione.

Dichiarazione fissa @model per non aggiungere spazi vuoti al documento

Nelle versioni precedenti, la @model dichiarazione nella parte superiore di una visualizzazione ha aggiunto una riga vuota all'output HTML di cui è stato eseguito il rendering. Questa operazione è stata risolta in modo che la dichiarazione non introduca spazi vuoti.

Aggiunta della proprietà "FileExtensions" ai motori di visualizzazione per supportare i nomi di file Engine-Specific

Un motore di visualizzazione può restituire una visualizzazione usando un percorso di visualizzazione esplicito come nell'esempio seguente:

return View("~/views/home/index.cshtml");

Il primo motore di visualizzazione tenta sempre di eseguire il rendering della visualizzazione. Per impostazione predefinita, il motore di visualizzazione Web Forms è il primo motore di visualizzazione, perché il motore di Web Forms non può eseguire il rendering di una visualizzazione Razor, si verifica un errore. I motori di visualizzazione dispongono ora di una proprietà FileExtensions usata per specificare quali estensioni di file supportano. Questa proprietà viene controllata quando ASP.NET determina se un motore di visualizzazione può eseguire il rendering di un file. Si tratta di una modifica di rilievo e altri dettagli sono inclusi nella sezione Modifiche di rilievo di questo documento.

Correzione dell'helper "LabelFor" per generare il valore corretto per l'attributo "For"

È stato risolto un bug in cui il metodo LabelFor ha eseguito il rendering di un attributo per che corrisponde all'attributo nome dell'elemento di input anziché al relativo ID. In base al W3C, l'attributo for deve corrispondere all'ID dell'elemento di input .

Correzione del metodo "RenderAction" per dare precedenza ai valori espliciti durante l'associazione di modelli

Nelle versioni precedenti, i valori espliciti passati al metodo RenderAction vengono ignorati a favore dei valori correnti del modulo durante l'associazione di modelli all'interno di un'azione figlio. La correzione garantisce che i valori espliciti siano preceduti durante l'associazione di modelli.

Modifiche di rilievo in ASP.NET MVC 3 RC2

  • Nelle versioni precedenti di ASP.NET MVC, i filtri di azione sono stati creati per ogni richiesta, ad eccezione di alcuni casi. Questo comportamento non era mai un comportamento garantito, ma semplicemente un dettaglio dell'implementazione e il contratto per i filtri era di considerarli senza stato. In ASP.NET MVC 3, i filtri vengono memorizzati nella cache in modo più aggressivo. Pertanto, qualsiasi filtro di azione personalizzato che archivia in modo errato lo stato dell'istanza potrebbe essere interrotto.
  • L'ordine di esecuzione per i filtri di eccezione è stato modificato per i filtri di eccezione con lo stesso valore order . In ASP.NET MVC 2 e versioni precedenti, i filtri delle eccezioni sul controller con lo stesso valore order di quelli di un metodo di azione sono stati eseguiti prima che i filtri di eccezione nel metodo di azione. Questo è in genere il caso in cui i filtri di eccezione sono stati applicati senza un valore order specificato. In ASP.NET MVC 3 questo ordine è stato invertito in modo che il gestore di eccezioni più specifico venga eseguito per primo. Come nelle versioni precedenti, se la proprietà Order viene specificata in modo esplicito, i filtri vengono eseguiti nell'ordine specificato.
  • Una nuova proprietà denominata FileExtensions è stata aggiunta alla classe di base VirtualPathProviderViewEngine . Quando ASP.NET cerca una visualizzazione in base al percorso (non per nome), vengono considerate solo le visualizzazioni con un'estensione di file contenuta nell'elenco specificato da questa nuova proprietà. Si tratta di una modifica di rilievo nelle applicazioni in cui viene registrato un provider di compilazione personalizzato per abilitare un'estensione di file personalizzata per le visualizzazioni Web Form e dove il provider fa riferimento a tali visualizzazioni usando un percorso completo anziché un nome. La soluzione alternativa consiste nel modificare il valore della proprietà FileExtensions per includere l'estensione file personalizzata.
  • Le implementazioni personalizzate della factory controller che implementano direttamente l'interfaccia IControllerFactory devono fornire un'implementazione del nuovo metodo GetControllerSessionBehavior aggiunto all'interfaccia in questa versione. In generale, è consigliabile non implementare direttamente questa interfaccia e derivare la classe da DefaultControllerFactory.

Problemi noti in ASP.NET MVC 3 RC2

  • Il programma di installazione ASP.NET MVC 3 è in grado di installare solo una versione iniziale della gestione pacchetti NuGet. Dopo aver installato la versione iniziale, NuGet può essere installato e aggiornato con Visual Studio Extension Manager. Se NuGet è già installato, passare alla raccolta di estensioni di Visual Studio per aggiornare alla versione più recente di NuGet.
  • La creazione di un nuovo progetto ASP.NET MVC 3 all'interno di una cartella della soluzione causa un errore NullReferenceException . Per risolvere questo problema, creare il progetto ASP.NET MVC 3 nella directory radice della soluzione e quindi spostarlo nella cartella della soluzione.
  • Il programma di installazione potrebbe richiedere molto più tempo rispetto alle versioni precedenti di ASP.NET MVC per completare. Questo perché aggiorna i componenti di Visual Studio 2010.
  • IntelliSense per la sintassi Razor non funziona quando è installato ReSharper. Se ReSharper è installato e si vuole sfruttare il supporto di Razor IntelliSense in ASP.NET MVC 3 RC2, vedere la voce Razor Intellisense e ReSharper nel blog di Hadi Hariri, che illustra i modi per usarli insieme oggi.
  • Le visualizzazioni CSHTML e VBHTML create con la versione Beta di ASP.NET MVC 3 non dispongono correttamente del set di azioni di compilazione, con il risultato che questi tipi di visualizzazione vengono omessi quando il progetto viene pubblicato. Il valore dell'azione di compilazione per questi file deve essere impostato su Contenuto". ASP.NET MVC 3 RC2 risolve questo problema per i nuovi file, ma non corregge l'impostazione per i file esistenti per un progetto creato con la versione Beta. Screenshot della finestra di dialogo proprietà. Il menu azione di compilazione è aperto e l'opzione contenuto è selezionata.
  • Durante l'installazione la finestra di dialogo per l'accettazione delle condizioni di licenza è più piccola di quella prevista.
  • Quando si modifica una visualizzazione Razor (file con estensione cshtml), la voce di menu Vai a controller in Visual Studio non sarà disponibile e non sono presenti frammenti di codice.
  • Se si installa ASP.NET MVC 3 per Visual Web Developer Express in un computer in cui Visual Studio non è installato e quindi si installa Visual Studio, è necessario reinstallare ASP.NET MVC 3. Visual Studio e Visual Web Developer Express condividono i componenti aggiornati dal programma di installazione di MVC 3 ASP.NET. Lo stesso problema si verifica se si installa ASP.NET MVC 3 per Visual Studio in un computer in cui non è installato Visual Web Developer Express e quindi si installa Visual Web Developer Express successivamente.
  • L'installazione di ASP.NET MVC 3 RC 2 non aggiorna NuGet se è già installato. Per aggiornare NuGet, passare a Gestione estensioni di Visual Studio e dovrebbe essere visualizzato come aggiornamento disponibile. È possibile aggiornare NuGet alla versione più recente da qui.

ASP.NET MVC 3 Release Candidate

ASP.NET MVC Release Candidate è stato rilasciato il 9 novembre 2010.

Nuove funzionalità in ASP.NET MVC 3 RC

Questa sezione descrive le funzionalità introdotte nella versione ASP.NET MVC 3 RC dopo la versione Beta.

Gestione pacchetti NuGet

ASP.NET MVC 3 include NuGet Package Manager (in precedenza noto come NuPack), che è uno strumento di gestione dei pacchetti integrato per aggiungere librerie e strumenti ai progetti di Visual Studio. Questo strumento automatizza i passaggi che gli sviluppatori eseguono oggi per ottenere una libreria nell'albero di origine.

È possibile usare NuGet come strumento da riga di comando, come finestra della console integrata all'interno di Visual Studio 2010, dal menu di scelta rapida di Visual Studio e come set di cmdlet di PowerShell.

Per altre informazioni su NuGet, leggere la documentazione di Nuget.

Finestra di dialogo "Nuovo progetto" migliorata

Quando si crea un nuovo progetto, la finestra di dialogo Nuovo progetto consente ora di specificare il motore di visualizzazione e un ASP.NET tipo di progetto MVC.

Screenshot della finestra di dialogo nuovo progetto. Il menu del motore di visualizzazione è aperto e razor è selezionato.

Il supporto per la modifica dell'elenco dei modelli e dei motori di visualizzazione elencati nella finestra di dialogo è incluso in questa versione.

I modelli predefiniti sono i seguenti:

Vuoto. Contiene un set minimo di file per un progetto MVC ASP.NET, inclusa la struttura di directory predefinita per i progetti MVC ASP.NET, un file Site.css che contiene gli stili MVC predefiniti e una directory Script che contiene i file JavaScript ASP.NET predefiniti.

Applicazione Internet. Contiene funzionalità di esempio che illustrano come usare il provider di appartenenza con ASP.NET MVC.

L'elenco dei modelli di progetto visualizzati nella finestra di dialogo è specificato nel Registro di sistema di Windows.

Controller senza sessione

Il nuovo ControllerSessionStateAttribute offre un maggiore controllo sul comportamento dello stato della sessione per i controller specificando un valore di enumerazione System.Web.SessionState.SessionStateBehavior .

Nell'esempio seguente viene illustrato come disattivare lo stato della sessione per tutte le richieste a un controller.

[ControllerSessionState(SessionStateBehavior.Disabled)]
public class CoolController : Controller {
    public ActionResult Index() {
        object o = Session["Key"]; // Causes an exception.

    }
}

Nell'esempio seguente viene illustrato come impostare lo stato della sessione di sola lettura per tutte le richieste a un controller.

[ControllerSessionState(SessionStateBehavior.ReadOnly)]
public class CoolController : Controller {
    public ActionResult Index() {
    Session["Key"] = "value"; // Value is not available in
    the next request
    }
}

Nuovi attributi di convalida

CompareAttribute

Il nuovo attributo di convalida compareAttribute consente di confrontare i valori di due proprietà diverse di un modello. Nell'esempio seguente la proprietà ComparePassword deve corrispondere al campo Password per essere valido.

public class User {
    [Required]

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

Remoteattribute

Il nuovo attributo di convalida remoteAttribute sfrutta il plug-in remote di convalida jQuery, che consente la convalida lato client per chiamare un metodo nel server che esegue la logica di convalida effettiva.

Nell'esempio seguente la proprietà UserName ha applicato RemoteAttribute . Quando si modifica questa proprietà in una visualizzazione Modifica, la convalida client chiamerà un'azione denominata UserNameAvailable nella classe UsersController per convalidare questo 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 impostazione predefinita, il nome della proprietà a cui viene applicato l'attributo viene inviato al metodo action come parametro query-string.

Nuovi overload per i metodi "LabelFor" e "LabelForModel"

Sono stati aggiunti nuovi overload per i metodi LabelFor e LabelForModel che consentono di specificare il testo dell'etichetta. Nell'esempio seguente viene illustrato come usare questi overload.

@Html.LabelFor(m => m.PropertyName,
"Label Text");
@Html.LabelForModel("Label Text");

Memorizzazione nella cache dell'output dell'azione figlio

OutputCacheAttribute supporta la memorizzazione nella cache di output delle azioni figlio chiamate usando i metodi helper Html.RenderAction o Html.Action. Nell'esempio seguente viene illustrata una visualizzazione che chiama un'altra azione.

Hi there. The uncached time is:
@DateTime.Now
The cached time is: @Html.Action("GetDate")

L'azione GetDate viene annotata con OutputCacheAttribute:

[OutputCache(Duration = 100,
VaryByParam = "none")]
public string GetDate() {
    return DateTime.Now.ToString();
}

Quando viene eseguito questo codice, il risultato della chiamata a Html.Action("GetDate") viene memorizzato nella cache per 100 secondi.

Miglioramenti della finestra di dialogo "Aggiungi visualizzazione"

Quando si aggiunge una visualizzazione fortemente tipizzata, la finestra di dialogo Aggiungi visualizzazione consente ora di filtrare più tipi non applicabili rispetto alle versioni precedenti, ad esempio molti tipi di .NET Framework di base. Inoltre, l'elenco è ora ordinato in base al nome della classe e non al nome del tipo completo, che semplifica la ricerca dei tipi. Ad esempio, il nome del tipo viene ora visualizzato come nell'esempio seguente:

ClassName (spazio dei nomi)

Nelle versioni precedenti, questa operazione sarebbe stata visualizzata come segue:

Namespace.ClassName

Convalida granulare della richiesta

La proprietà Exclude di ValidateInputAttribute non esiste più. Per avere invece ignorato la convalida della richiesta per proprietà specifiche di un modello durante l'associazione di modelli, usare il nuovo SkipRequestValidationAttribute.

Si supponga, ad esempio, che un metodo di azione venga usato per modificare un post di blog:

[HttpPost]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

Nell'esempio seguente viene illustrato il modello di visualizzazione per un post di blog.

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    public string Description {get; set;}
}

Quando un utente invia un markup per la proprietà Description, l'associazione di modelli avrà esito negativo a causa della convalida della richiesta. Per disabilitare la convalida della richiesta durante l'associazione di modelli per il post di blog Description, applicare SkipRequpestValidationAttribute alla proprietà, come illustrato in questo esempio:.

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

In alternativa, per disattivare la convalida della richiesta per ogni proprietà del modello, applicare ValidateInputAttribute con un valore false al metodo action:

[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

Modifiche di rilievo in ASP.NET MVC 3 RC

  • L'ordine di esecuzione per i filtri di eccezione è stato modificato per i filtri di eccezione con lo stesso valore order . In ASP.NET MVC 2 e versioni precedenti, i filtri delle eccezioni sul controller con lo stesso Ordine di quelli di un metodo di azione sono stati eseguiti prima che i filtri di eccezione nel metodo di azione. Questo è in genere il caso in cui i filtri di eccezione sono stati applicati senza un valore order specificato. In ASP.NET MVC 3 questo ordine è stato invertito in modo che il gestore di eccezioni più specifico venga eseguito per primo. Come nelle versioni precedenti, se la proprietà Order viene specificata in modo esplicito, i filtri vengono eseguiti nell'ordine specificato.
  • Aggiunta di una nuova proprietà denominata FileExtensions alla classe di base VirtualPathProviderViewEngine . Quando si cerca una visualizzazione in base al percorso (e non in base al nome), vengono considerate solo le visualizzazioni con un'estensione di file contenuta nell'elenco specificato da questa nuova proprietà. Si tratta di una modifica di rilievo per coloro che registrano un provider di compilazione personalizzato per abilitare un'estensione di file personalizzata per le visualizzazioni del modulo Web e fanno riferimento a tali visualizzazioni usando un percorso completo anziché un nome. La soluzione alternativa consiste nel modificare il valore della proprietà FileExtensions per includere l'estensione file personalizzata.

Problemi noti in ASP.NET MVC 3 RC

  • Il programma di installazione potrebbe richiedere molto più tempo rispetto alle versioni precedenti di ASP.NET MVC per completare perché aggiorna i componenti di Visual Studio 2010.
  • L'scaffolding Aggiungi visualizzazione quando si selezionano proprietà di sola scrittura digitate in modalità astrongly. Questi devono essere sempre ignorati dallo scaffolding. La finestra di dialogo Aggiungi visualizzazione esegue anche scaffolds proprietà di sola lettura durante la generazione di una visualizzazione "Modifica" o "Crea". Le proprietà di sola lettura devono essere scaffoldate solo per le visualizzazioni Visualizzazione e elenco.
  • Il debug non funziona quando ASP.NET MVC 3 viene installato insieme a Async CTP. ASP.NET MVC 3 non può essere installato side-by-side con Async CTP. Disinstallare Async CTP per ripristinare il debug. Per altre informazioni, leggere questo post di blog sulla disinstallazione di tutte le parti di ASP.NET MVC 3 RC.
  • Razor Intellisense non funziona quando Resharper è installato. Se ReSharper è installato e si vuole sfruttare il supporto di Razor intellisense in ASP.NET MVC 3 RC, leggere questo post di blog da JetBrains che illustra i modi per usarli insieme oggi.
  • Le visualizzazioni CSHTML e VBHTML create con Beta di ASP.NET MVC 3 non dispongono correttamente dell'azione di compilazione che li omette dalla pubblicazione. L'azione di compilazione per questi file deve essere impostata su "Contenuto". ASP.NET MVC 3 RC risolve questo problema per i nuovi file, ma non corregge l'impostazione per i file esistenti per un progetto creato con la versione Beta.
  • Il programma di installazione potrebbe richiedere molto più tempo rispetto alle versioni precedenti di ASP.NET MVC per completare perché aggiorna i componenti di Visual Studio 2010.
  • L'scaffolding Aggiungi visualizzazione durante la selezione di una visualizzazione fortemente tipizzata "Modifica" legge solo le proprietà. Analogamente, le proprietà di sola scrittura vengono scaffolded per le visualizzazioni "Display".
  • Durante l'installazione la finestra di dialogo per l'accettazione delle condizioni di licenza è più piccola di quella prevista.
  • L'installazione di Visual Studio Async CTP causa un conflitto con la versione Razor inclusa nell'ambito dell'installazione degli strumenti MVC 3 ASP.NET. Assicurarsi di non provare a installare sia Visual Studio Async CTP che la versione Razor nello stesso computer.
  • Quando si modifica una visualizzazione Razor (file con estensione cshtml), la voce di menu Vai a controller in Visual Studio non sarà disponibile e non sono presenti frammenti di codice.

ASP.NET MVC 3 Beta

ASP.NET MVC 3 Beta è stato rilasciato il 6 ottobre 2010. Le note seguenti sono specifiche della versione Beta e sono soggette a eventuali aggiornamenti o modifiche a cui si fa riferimento nella sezione ASP.NET MVC 3 Release Candidate precedente.

Nuove funzionalità in ASP.NET MVC 3 Beta

Questa sezione descrive le funzionalità introdotte nella versione beta ASP.NET MVC 3.

Gestione pacchetti NuGet

ASP.NET MVC 3 include Gestione pacchetti NuGet, che è uno strumento di gestione pacchetti integrato per aggiungere librerie e strumenti ai progetti di Visual Studio. Per la maggior parte, automatizza i passaggi che gli sviluppatori eseguono oggi per ottenere una libreria nell'albero di origine.

È possibile usare NuGet come strumento della riga di comando, come finestra della console integrata all'interno di Visual Studio 2010, dal menu di scelta rapida di Visual Studio e come set di cmdlet di PowerShell.

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

Finestra di dialogo Nuovo progetto migliorata

Quando si crea un nuovo progetto, la finestra di dialogo Nuovo progetto consente ora di specificare il motore di visualizzazione e un ASP.NET tipo di progetto MVC.

Screenshot della finestra di dialogo nuovo progetto. Razor è selezionato dal menu del motore di visualizzazione.

Il supporto per la modifica dell'elenco dei modelli e dei motori di visualizzazione elencati nella finestra di dialogo non è incluso in questa versione.

I modelli predefiniti sono i seguenti:

Vuoto. Contiene un set minimo di file per un progetto MVC ASP.NET, inclusa la struttura di directory ASP.NET predefinita per i progetti MVC ASP.NET, un piccolo file Site.css che contiene gli stili MVC predefiniti e una directory Script che contiene i file JavaScript predefiniti.

Applicazione Internet. Contiene funzionalità di esempio che illustrano come usare il provider di appartenenza all'interno di ASP.NET MVC.

Modo semplificato per specificare modelli fortemente tipizzati nelle visualizzazioni Razor

Il modo per specificare il tipo di modello per le visualizzazioni Razor fortemente tipizzata è stato semplificato usando la nuova @model direttiva per le visualizzazioni CSHTML e @ModelType la direttiva per le visualizzazioni VBHTML. Nelle versioni precedenti di ASP.NET MVC specificare un modello fortemente tipizzato per le visualizzazioni Razor in questo modo:

@inherits System.Web.Mvc.WebViewPage

In questa versione è possibile usare la sintassi seguente:

@model MyModelNamespace.MyModelType

Supporto per i nuovi metodi helper Pagine Web ASP.NET

La nuova tecnologia Pagine Web ASP.NET include un set di metodi helper utili per aggiungere funzionalità comunemente usate alle visualizzazioni e ai controller. ASP.NET MVC 3 supporta l'uso di questi metodi helper all'interno di controller e viste (se appropriato). Questi metodi sono contenuti nell'assembly System.Web.Helpers. Nella tabella seguente sono elencati alcuni metodi helper Pagine Web ASP.NET.

Aiutante Descrizione
Grafico Esegue il rendering di un grafico all'interno di una visualizzazione. Contiene metodi come Chart.ToWebImage, Chart.Save e Chart.Write.
Crypto Usa gli algoritmi di hashing per creare password con sale e hash correttamente.
Webgrid Esegue il rendering di una raccolta di oggetti (in genere, dati da un database) come griglia. Supporta il paging e l'ordinamento.
WebImage Esegue il rendering di un'immagine.
Webmail Invia un messaggio di posta elettronica.

Un argomento di riferimento rapido che elenca gli helper e la sintassi di base è disponibile come parte della documentazione della sintassi Razor ASP.NET all'URL seguente:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-api-reference

Supporto aggiuntivo per l'inserimento delle dipendenze

Basandosi sulla versione ASP.NET MVC 3 Preview 1, la versione corrente include il supporto aggiunto per due nuovi servizi e quattro servizi esistenti e il supporto migliorato per la risoluzione delle dipendenze e Common Service Locator.

Nuova interfaccia IControllerActivator per la creazione di istanze del controller Fine-Grained

La nuova interfaccia IControllerActivator offre un controllo più granulare sulla modalità di creazione di istanze dei controller tramite l'inserimento delle dipendenze. L'esempio seguente mostra l'interfaccia :

namespace System.Web.Mvc {
    using System.Web.Routing;

    public interface IControllerActivator {
        IController Create(RequestContext requestContext, Type controllerType);
    }
}

A differenza del ruolo della factory del controller. Una factory del controller è un'implementazione dell'interfaccia IControllerFactory, responsabile sia dell'individuazione di un tipo di controller che della creazione di un'istanza di tale tipo di controller.

Gli attivatori del controller sono responsabili solo della creazione di un'istanza di un tipo di controller. Non eseguono la ricerca del tipo di controller. Dopo aver individuato un tipo di controller appropriato, le factory controller devono delegare a un'istanza di IControllerActivator per gestire l'effettiva creazione di istanze del controller.

La classe DefaultControllerFactory ha un nuovo costruttore che accetta un'istanza di IControllerFactory. In questo modo è possibile applicare l'inserimento delle dipendenze per gestire questo aspetto della creazione del controller senza dover eseguire l'override del comportamento di ricerca predefinito del tipo di controller.

Interfaccia IServiceLocator sostituita con IDependencyResolver

In base al feedback della community, la versione beta di ASP.NET MVC 3 ha sostituito l'uso dell'interfaccia IServiceLocator con un'interfaccia IDependencyResolver snellata specifica per le esigenze di ASP.NET MVC. L'esempio seguente mostra la nuova interfaccia:

namespace System.Web.Mvc {
    using System.Collections.Generic;

    public interface IDependencyResolver {
        object GetService(Type serviceType);
        IEnumerable<object> GetServices(Type serviceType);
    }
}

Come parte di questa modifica, anche la classe ServiceLocator è stata sostituita con la classe DependencyResolver. La registrazione di un sistema di risoluzione delle dipendenze è simile alle versioni precedenti di ASP.NET MVC:

DependencyResolver.SetResolver(myResolver);

Le implementazioni di questa interfaccia devono semplicemente delegare al contenitore di inserimento delle dipendenze sottostante per fornire il servizio registrato per il tipo richiesto.

Quando non sono presenti servizi registrati del tipo richiesto, ASP.NET MVC prevede implementazioni di questa interfaccia per restituire null da GetService e restituire una raccolta vuota da GetServices.

La nuova classe DependencyResolver consente di registrare classi che implementano la nuova interfaccia IDependencyResolver o l'interfaccia Common Service Locator (IServiceLocator). Per altre informazioni su Common Service Locator, vedere CommonServiceLocator in GitHub.

Nuova interfaccia IViewActivator per la creazione di istanze della pagina di visualizzazione Fine-Grained

La nuova interfaccia IViewPageActivator offre un controllo più granulare sulla modalità di creazione di istanze delle pagine di visualizzazione tramite l'inserimento delle dipendenze. Questo vale sia per le istanze di WebFormView che per le istanze razorView. L'esempio seguente mostra la nuova interfaccia:

namespace System.Web.Mvc {
    public interface IViewPageActivator {
        object Create(ControllerContext controllerContext, Type type);
    }
}

Queste classi accettano ora un argomento del costruttore IViewPageActivator, che consente di usare l'inserimento delle dipendenze per controllare la modalità di creazione di istanze dei tipi ViewPage, ViewUserControl e WebViewPage.

Nuovo supporto del resolver di dipendenze per i servizi esistenti

La nuova versione include il supporto per la risoluzione delle dipendenze per i servizi seguenti:

  • Provider di convalida del modello. Le classi che implementano ModelValidatorProvider possono essere registrate nel resolver delle dipendenze e il sistema le userà per supportare la convalida lato client e lato server.
  • Provider di metadati del modello. Una singola classe che implementa ModelMetadataProvider può essere registrata nel resolver di dipendenze e il sistema lo userà per fornire metadati per i sistemi di creazione modelli e convalida.
  • Provider di valori. Le classi che implementano ValueProviderFactory possono essere registrate nel sistema di risoluzione delle dipendenze e le useranno per creare provider di valori utilizzati dal controller e durante l'associazione di modelli.
  • Strumenti di associazione di modelli. Le classi che implementano IModelBinderProvider possono essere registrate nel sistema di risoluzione delle dipendenze e il sistema le userà per creare gli strumenti di associazione di modelli utilizzati dal sistema di associazione di modelli.

Nuovo supporto per JQuery basato su JQuery

ASP.NET MVC include metodi helper Ajax, ad esempio i seguenti:

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax.BeginForm
  • Ajax.BeginRouteForm

Questi metodi usano JavaScript per richiamare un metodo di azione nel server anziché usare un postback completo. Questa funzionalità è stata aggiornata per sfruttare jQuery in modo non invadente. Anziché generare script client inline intrusivamente, questi metodi helper separano il comportamento dal markup creando attributi HTML5 usando il prefisso data-ajax . Il comportamento viene quindi applicato al markup facendo riferimento ai file JavaScript appropriati. Assicurarsi che venga fatto riferimento ai file JavaScript seguenti:

  • jquery-1.4.1.js
  • jquery.unobtrusive.ajax.js

Questa funzionalità è abilitata per impostazione predefinita nel file Web.config nel ASP.NET MVC 3 nuovi modelli di progetto, ma è disabilitata per impostazione predefinita per i progetti esistenti. Per altre informazioni, vedere Aggiunta di flag a livello di applicazione per la convalida client e JavaScript non invadente più avanti in questo documento.

Nuovo supporto per la convalida di jQuery unobtrusive

Per impostazione predefinita, ASP.NET MVC 3 Beta usa la convalida jQuery in modo non invadente per eseguire la convalida lato client. Per abilitare la convalida client non invasiva, effettuare una chiamata simile alla seguente dall'interno di una visualizzazione:

Html.EnableClientValidation();

Ciò richiede che la proprietà ViewContext.UnobtrusiveJavaScriptEnabled sia impostata su true, che è possibile eseguire eseguendo la chiamata seguente:

Html.EnableUnobtrusiveJavaScript();

Assicurarsi anche che venga fatto riferimento ai file JavaScript seguenti.

  • jquery-1.4.1.js
  • jquery.validate.js
  • jquery.validate.unobtrusive.js

Questa funzionalità è abilitata per impostazione predefinita nel file Web.config nel ASP.NET MVC 3 nuovi modelli di progetto, ma è disabilitata per impostazione predefinita per i progetti esistenti. Per altre informazioni, vedere Nuovi flag a livello di applicazione per la convalida client e JavaScript non invadente più avanti in questo documento.

Nuovi flag di Application-Wide per la convalida client e JavaScript non invadente

È possibile abilitare o disabilitare la convalida client e JavaScript non invadente a livello globale usando membri statici della classe HtmlHelper, come nell'esempio seguente:

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

I modelli di progetto predefiniti abilitano JavaScript non invasivo per impostazione predefinita. È anche possibile abilitare o disabilitare queste funzionalità nel file radice Web.config dell'applicazione usando le impostazioni seguenti:

<configuration>
        <appSettings>
            <add key="ClientValidationEnabled" value="true"/>
            <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
        </appSettings>
    </configuration>

Poiché è possibile abilitare queste funzionalità per impostazione predefinita, sono stati introdotti nuovi overload nella classe HtmlHelper che consentono di eseguire l'override delle impostazioni predefinite, come illustrato negli esempi seguenti:

public void EnableClientValidation();
public void EnableClientValidation(bool enabled);
public void EnableUnobtrusiveJavaScript();
public void EnableUnobtrusiveJavaScript(bool enabled);

Per la compatibilità con le versioni precedenti, entrambe queste funzionalità sono disabilitate per impostazione predefinita.

Nuovo supporto per il codice eseguito prima dell'esecuzione delle viste

È ora possibile inserire un file denominato _viewstart.cshtml (o _viewstart.vbhtml) nella directory Views e aggiungervi il codice che verrà condiviso tra più visualizzazioni in tale directory e nelle relative sottodirectory. Ad esempio, è possibile inserire il codice seguente nella pagina _viewstart.cshtml nella cartella ~/Views:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

In questo modo viene impostata la pagina di layout per ogni visualizzazione all'interno della cartella Views e di tutte le relative sottocartelle in modo ricorsivo. Quando viene eseguito il rendering di una vista, il codice nel file _viewstart.cshtml viene eseguito prima dell'esecuzione del codice di visualizzazione. Il codice _viewstart.cshtml si applica a ogni visualizzazione della cartella.

Per impostazione predefinita, il codice nel file _viewstart.cshtml si applica anche alle viste in qualsiasi sottocartella. Tuttavia, le singole sottocartelle possono avere la propria versione del file _viewstart.cshtml; in tal caso, la versione locale ha la precedenza. Ad esempio, per eseguire codice comune a tutte le visualizzazioni per HomeController, inserire un file _viewstart.cshtml nella cartella ~/Views/Home.

Nuovo supporto per la sintassi Razor VBHTML

L'anteprima di ASP.NET MVC precedente includeva il supporto per le visualizzazioni usando la sintassi Razor basata su C#. Queste visualizzazioni usano l'estensione di file cshtml. Come parte del lavoro in corso per supportare Razor, il ASP.NET MVC 3 Beta introduce il supporto per la sintassi Razor in Visual Basic, che usa l'estensione di file vbhtml.

Per un'introduzione all'uso della sintassi di Visual Basic nelle pagine VBHTML, vedere l'esercitazione nell'URL seguente:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-visual-basic

Controllo più granulare su ValidateInputAttribute

ASP.NET MVC ha sempre incluso la classe ValidateInputAttribute, che richiama l'infrastruttura di convalida delle richieste di base ASP.NET per assicurarsi che la richiesta in ingresso non contenga input potenzialmente dannoso. Per impostazione predefinita, la convalida dell'input è abilitata. È possibile disabilitare la convalida delle richieste usando l'attributo ValidateInputAttribute, come nell'esempio seguente:

[ValidateInput(false)]
public ActionResult SomeAction() {
    return View();
}

Tuttavia, molte applicazioni Web dispongono di singoli campi modulo che devono consentire il codice HTML, mentre i campi rimanenti non devono essere presenti. La classe ValidateInputAttribute consente ora di specificare un elenco di campi che non devono essere inclusi nella convalida della richiesta.

Ad esempio, se si sviluppa un motore di blog, è possibile consentire il markup nei campi Corpo e Riepilogo. Questi campi possono essere rappresentati da due elementi di input, ognuno con un attributo name corrispondente al nome della proprietà ("Body" e "Summary"). Per disabilitare la convalida delle richieste solo per questi campi, specificare i nomi (delimitati da virgole) nella proprietà Exclude della classe ValidateInput, come nell'esempio seguente:

[ValidateInput(true, Exclude="Body, Summary")]
public ActionResult About() {
    return View();
}

Gli helper convertono i caratteri di sottolineatura in trattini per i nomi degli attributi HTML specificati usando oggetti anonimi

I metodi helper consentono di specificare coppie nome/valore dell'attributo usando un oggetto anonimo, come nell'esempio seguente:

Html.TextBox("Name", "Value", new {title = "Title"})

Questo approccio non consente di usare trattini nel nome dell'attributo, perché non è possibile usare un trattino per un nome di proprietà in ASP.NET. Tuttavia, i trattini sono importanti per gli attributi HTML5 personalizzati; ad esempio, HTML5 usa il prefisso "data-".

Allo stesso tempo, i caratteri di sottolineatura non possono essere usati per i nomi degli attributi in HTML, ma sono validi all'interno dei nomi delle proprietà. Pertanto, se si specificano attributi usando un oggetto anonimo e se i nomi degli attributi includono un carattere di sottolineatura, i metodi helper convertiranno i caratteri di sottolineatura in trattini. Ad esempio, la sintassi helper seguente usa un carattere di sottolineatura:

Html.TextBox("Name", "Value", new {data_required = "true"})

Nell'esempio precedente viene eseguito il rendering del markup seguente quando viene eseguito l'helper:

<input data-required="true" id="Name" name="Name"
       type="textbox" value="Value" />

Correzioni di bug

Il modello di oggetto predefinito per gli helper del modello EditorFor e DisplayFor supporta ora l'ordinamento specificato nella proprietà DisplayAttribute.Order. Nelle versioni precedenti l'impostazione Order non è stata usata.

La convalida client supporta ora la convalida delle proprietà sottoposte a override che hanno attributi di convalida applicati.

JsonValueProviderFactory è ora registrato per impostazione predefinita.

Modifiche di rilievo

L'ordine di esecuzione per i filtri di eccezione è stato modificato per i filtri di eccezione con lo stesso valore order. In ASP.NET MVC 2 e versioni precedenti, i filtri delle eccezioni nel controller con lo stesso Ordine di quelli di un metodo di azione sono stati eseguiti prima che i filtri eccezioni nel metodo di azione. Questo è in genere il caso in cui i filtri di eccezione sono stati applicati senza un valore order specificato. In ASP.NET MVC 3 questo ordine è stato invertito in modo che il gestore di eccezioni più specifico venga eseguito per primo. Come nelle versioni precedenti, se la proprietà Order viene specificata in modo esplicito, i filtri vengono eseguiti nell'ordine specificato.

Problemi noti

Durante l'installazione la finestra di dialogo per l'accettazione delle condizioni di licenza è più piccola di quella prevista.

Le visualizzazioni Razor non dispongono del supporto di IntelliSense né dell'evidenziazione della sintassi. Si prevede che il supporto per la sintassi Razor in Visual Studio venga incluso come parte di una versione successiva.

Quando si modifica una visualizzazione Razor (file CSHTML), la voce di menu Vai a controller in Visual Studio non sarà disponibile e non sono presenti frammenti di codice.

Quando si usa la @model sintassi per specificare una visualizzazione CSHTML fortemente tipizzata, i collegamenti specifici del linguaggio per i tipi non vengono riconosciuti. Ad esempio, @model int non funzionerà, ma @model Int32 funzionerà. La soluzione alternativa per questo bug consiste nell'usare il nome del tipo effettivo quando si specifica il tipo di modello.

Quando si usa la @model sintassi per specificare una vista CSHTML fortemente tipizzata o @ModelType per specificare una visualizzazione VBHTML fortemente tipizzata, i tipi nullable e le dichiarazioni di matrice non sono supportati. Ad esempio, @model int? non è supportato. Usare invece @model Nullable<Int32>. La stringa di sintassi @model [] non è supportata; invece, usare @model IList<string>.

Quando si aggiorna un progetto ASP.NET MVC 2 a ASP.NET MVC 3, assicurarsi di aggiungere quanto segue alla sezione appSettings del file Web.config:

<appSettings>
  <add key="enableSimpleMembership" value="false" />
</appSettings>

Si è verificato un problema noto che causa il reindirizzamento sempre degli utenti non autenticati a ~/Account/Login, ignorando l'impostazione di autenticazione dei moduli usata in Web.config. La soluzione alternativa consiste nell'aggiungere l'impostazione dell'app seguente.

<add key="autoFormsAuthentication" value="false" />

Dichiarazione di non responsabilità

© 2011 Microsoft Corporation. Tutti i diritti sono riservati. Questo documento viene fornito "come è". Informazioni e visualizzazioni espresse in questo documento, tra cui URL e altri riferimenti al sito Web Internet, possono cambiare senza preavviso. L'utente accetta di usarle a proprio rischio.

Il presente documento non implica la concessione di alcun diritto di proprietà intellettuale in relazione ai prodotti Microsoft. Sono consentiti la copia e l'uso del presente documento a fini di riferimento interno.