versionshinweise zu ASP.NET MVC 3

Überblick

In diesem Dokument wird die Veröffentlichung von ASP.NET MVC 3 RTM für Visual Studio 2010 beschrieben. ASP.NET MVC ist ein Framework für die Entwicklung von Webanwendungen, die das MVC-Muster (Model-View-Controller) verwenden. Das ASP.NET MVC 3-Installationsprogramm enthält die folgenden Komponenten:

  • ASP.NET MVC 3-Laufzeitkomponenten
  • ASP.NET MVC 3 Visual Studio 2010-Tools
  • ASP.NET Web Pages Laufzeitkomponenten
  • ASP.NET Web Pages Visual Studio 2010-Tools
  • Microsoft-Paket-Manager für .NET (NuGet)
  • Ein Update für Visual Studio 2010, das die Unterstützung für Razor-Syntax ermöglicht. (Ausführliche Informationen finden Sie im KnowledgeBase-Artikel 2483190.)

Sämtliche Versionshinweise zu den Vorabversionen von ASP.NET MVC 3 können unter der folgenden URL von der ASP.NET-Website abgerufen werden:

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

Installationshinweise

Um ASP.NET MVC 3 RTM mithilfe des Webplattform-Installers (Web PI) zu installieren, besuchen Sie die folgende Seite:

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

Alternativ können Sie das Installationsprogramm für ASP.NET MVC 3 RTM für Visual Studio 2010 von der folgenden Seite herunterladen:

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

ASP.NET MVC 3 kann installiert werden und parallel mit ASP.NET MVC 2 ausgeführt werden.

Softwareanforderungen

Die ASP.NET MVC 3-Laufzeitkomponenten benötigen die folgende Software:

  • .NET Framework Version 4.

    Die ASP.NET MVC 3 Visual Studio 2010-Tools benötigen die folgende Software:

  • Visual Studio 2010 oder Visual Web Developer 2010 Express

Dokumentation

Die Dokumentation für ASP.NET MVC ist auf der MSDN-Website unter der folgenden URL verfügbar:

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

Tutorials und andere Informationen zu ASP.NET MVC sind auf der MVC-Seite der ASP.NET-Website unter der folgenden URL verfügbar:

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

Support

Für diese Version wird vollständige Unterstützung geboten. Informationen zum Erhalten von technischem Support finden Sie auf der Website der Microsoft-Support.

Darüber hinaus können Sie im ASP.NET MVC-Forum Fragen zu dieser Version stellen. Oftmals können die in diesem Forum aktiven Mitglieder der ASP.NET-Community informelle Unterstützung leisten.

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

Aktualisieren eines ASP.NET MVC 2-Projekts auf ASP.NET MVC 3 Tools Update

ASP.NET MVC 3 kann parallel zu ASP.NET MVC 2 auf demselben Computer installiert werden, sodass Sie flexibel entscheiden können, wann eine ASP.NET MVC 2-Anwendung auf ASP.NET MVC 3 aktualisiert werden soll.

Zum manuellen Aktualisieren einer bestehenden ASP.NET MVC 2-Anwendung auf Version 3 führen Sie die folgenden Schritte durch:

  1. Erstellen Sie auf Ihrem Computer ein neues, leeres ASP.NET MVC 3-Projekt. Dieses Projekt enthält einige Dateien, die für die Aktualisierung benötigt werden.

  2. Kopieren Sie die folgenden Dateien aus dem ASP.NET MVC 3-Projekt an die entsprechende Position Ihres ASP.NET MVC 2-Projekts. Um dem neuen Dateinamen (jQuery-1.5.1.js) Rechnung zu tragen, müssen Sie sämtliche Verweise auf die jQuery-Bibliothek aktualisieren:

    • /Views/Web.config
    • /packages.config
    • /scripts/*.js
    • /Content/themes/*.*
  3. Kopieren Sie den Paketordner im Stammverzeichnis der leeren Projektmappe ASP.NET MVC 3 in den Stamm ihrer Projektmappe, der sich in dem Verzeichnis befindet, in dem sich die SLN-Datei der Projektmappe befindet.

  4. Wenn Ihr ASP.NET MVC 2-Projekt Bereiche enthält, kopieren Sie die Datei /Views/Web.config in den Ordner Ansichten jedes Bereichs.

  5. Ersetzen Sie durch globales Suchen und Ersetzen die ASP.NET MVC-Versionsbezeichnung in beiden Web.config-Dateien des ASP.NET MVC 2-Projekts. Suchen Sie nach:

    System.Web.Mvc, Version=2.0.0.0
    

    Ersetzen Sie ihn durch Folgendes:

    System.Web.Mvc, Version=3.0.0.0
    
  6. Löschen Sie in Projektmappen-Explorer den Verweis auf System.Web.Mvc (der auf die DLL aus Version 2 verweist), und fügen Sie dann einen Verweis auf System.Web.Mvc (v3.0.0.0) hinzu.

  7. Fügen Sie einen Verweis auf System.Web.WebPages.dll und System.Web.Helpers.dll hinzu. Diese Assemblies befinden sich in den folgenden Ordnern:

    • %ProgramFiles%\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies
    • %ProgramFiles%\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
  8. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, und klicken Sie auf Projekt entfernen. Klicken Sie dann erneut mit der rechten Maustaste auf den Projektnamen, und wählen Sie Projektname.csproj bearbeiten aus.

  9. Suchen Sie das ProjectTypeGuids-Element , und ersetzen Sie {F85E285D-A4E0-4152-9332-AB1D724D3325} durch {E53F8FEA-EAE0-44A6-8774-FFD645390401}.

  10. Speichern Sie die Änderungen, klicken Sie mit der rechten Maustaste auf den Projektnamen, und wählen Sie dann Projekt erneut laden.

  11. Fügen Sie in der Web.config-Stammdatei der Anwendung dem Abschnitt Assemblys die folgenden Einstellungen hinzu.

    <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. Wenn das Projekt auf Bibliotheken von Drittanbietern verweist, die mit ASP.NET MVC 2 kompiliert werden, fügen Sie das folgende hervorgehobene bindingRedirect-Element zur Web.config-Datei im Anwendungsstamm im Konfigurationsabschnitt hinzu:

    <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>
    

Änderungen in ASP.NET MVC 3 Tools Update

Dieser Abschnitt beschreibt die in ASP.NET MVC 3 Tools Update gegenüber ASP.NET MVC 3 RTM vorgenommenen Änderungen.

Das Dialogfeld "Controller hinzufügen" kann Controller jetzt mit einem Gerüst aus Ansichten und Code für den Datenzugriff versehen

Gerüstbau stellt eine Möglichkeit dar, schnell und einfach einen Controller und Ansichten für Ihre Anwendung zu erstellen. Nachdem der Code generiert wurde, können Sie ihn bearbeiten, um die Anforderungen Ihres Projekts zu erfüllen.

Um das Dialogfeld Controller hinzufügen in ASP.NET MVC 3 zu starten, klicken Sie mit der rechten Maustaste auf den Ordner Controller in Projektmappen-Explorer, klicken Sie auf Hinzufügen, und klicken Sie dann auf Controller. Das Dialogfeld wurde verbessert und bietet nun zusätzliche Optionen für den Gerüstbau.

Screenshot des Dialogfelds

In der Standardeinstellung stehen die drei folgenden Gerüstbauvorlagen zur Verfügung.

Leerer Controller

Diese Vorlage erzeugt eine leere Controllerdatei. Diese Vorlage entspricht nicht dem Aktivieren von Hinzufügen von Aktionen zum Erstellen, Bearbeiten, Details, Löschen von Szenarien in früheren Versionen von ASP.NET MVC. Wenn Sie diese Vorlage auswählen, stehen keine weiteren Optionen zur Verfügung.

Controller mit leeren Lese-/Schreibaktionen

Diese Vorlage erzeugt eine Controllerdatei, die alle erforderlichen Aktionsmethoden enthält, wobei die Methoden jedoch keinen Implementierungscode besitzen. Diese Vorlage entspricht dem Aktivieren von Aktionen zum Erstellen, Bearbeiten, Details, Löschen von Szenarien in früheren Versionen von ASP.NET MVC. Wenn Sie diese Vorlage auswählen, stehen keine weiteren Optionen zur Verfügung.

Controller mit Lese-/Schreibaktionen und Ansichten unter Verwendung von Entity Framework

Diese Vorlage ermöglicht es Ihnen, schnell eine funktionstüchtige Dateneingabe-Benutzeroberfläche zu erstellen. Sie erzeugt Code, der eine Vielzahl gängiger Anforderungen und Szenarien behandelt, so beispielsweise:

  • Datenzugriff. Der erzeugte Code liest und schreibt Entitäten in einer Datenbank. Es funktioniert mit dem Entity Framework Code First-Ansatz, wenn Sie eine vorhandene Datenkontextklasse auswählen oder die Vorlage eine neue DbContext-Klasse generieren lassen. Es funktioniert auch mit dem Entity Framework Database First- oder Model First-Ansatz, wenn Sie eine vorhandene ObjectContext-Klasse auswählen.

  • Validierung. Der erzeugte Code verwendet ASP.NET MVC-Modellbindung und Metadatenfunktionen, um übermittelte Formulare entsprechend der in Ihrer Modellklasse deklarierten Regeln zu überprüfen. Dies umfasst integrierte Validierungsregeln, z. B. das Attribut Required und StringLength , und benutzerdefinierte Validierungsregeln.

  • 1:n-Beziehungen. Wenn Sie 1:n-Fremdschlüssel-Beziehungen zwischen Ihren Modellklassen definieren, generiert der erzeugte Code Dropdownlisten für die Auswahl von verknüpften Entitäten. So könnten Sie beispielsweise auf Grundlage der Entity Framework Code First-Konventionen die folgenden Modellklassen definieren:

    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; }
    }
    

    Wenn Sie dann einen Controller für die Product-Klasse gerüstet haben, können Benutzer anhand seiner Ansichten ein Category-Objekt für jedes Product-instance auswählen.

    Diese Vorlage aktiviert zusätzliche Optionen im Dialogfeld Controller hinzufügen . Für die Model-Klasse können Sie eine beliebige Modellklasse in Ihrer Projektmappe auswählen, die den Typ der Daten bestimmt, die Benutzer erstellen oder bearbeiten können:

  • Wenn Sie Entity Framework Code First verwenden möchten, können Sie jede beliebige Modellklasse wählen.

  • Wenn Sie Entity Framework Database First oder Entity Framework Model First verwenden, müssen Sie darauf achten, eine in Ihrem konzeptionellen Modell definierte Entitätenklasse zu wählen.

Für die Data Context-Klasse können Sie die folgenden Optionen treffen:

  • Wenn Sie Code First verwenden möchten und keine Datenkontextklasse vorhanden ist, wählen Sie **Neuer Datenkontext **. In diesem Fall wird eine neue Datenkontextklasse für Sie erstellt.
  • Wenn Sie Code First verwenden möchten und über eine bestehende Datenkontextklasse verfügen, so wählen Sie diese hier aus. In diesem Fall wird sie aktualisiert, um die ausgewählte Modellklasse beizubehalten.
  • Wenn Sie Database First oder Model First verwenden, so wählen Sie hier Ihre Objektkontextklasse aus.

Wählen Sie unter Ansichten die gewünschte Ansichts-Engine aus, oder wählen Sie Keines, wenn Sie keine Ansichten in das Gerüst aufnehmen möchten.

Sie können Erweiterte Optionen auswählen, um weitere Optionen für die generierten Ansichten anzugeben. Beispielsweise können Sie die zu verwendende Layout- oder Masterseite auswählen.

Verbesserungen am Dialogfeld "Neues ASP.NET MVC 3-Projekt"

Das Dialogfeld für die Erstellung neuer ASP.NET MVC 3-Projekte weist eine Vielzahl von Verbesserungen auf (siehe nachstehende Aufstellung).

Screenshot des Dialogfelds

Neue Vorlage für Intranetprojekte

Die Liste Projektvorlage enthält nun eine neue Vorlage Intranetanwendung. Diese Vorlage enthält Einstellungen für das Erstellen von Webanwendungen unter Verwendung der Windowsauthentifizierung (anstatt der Formularauthentifizierung). Da eine Intranetanwendung einige IIS-Einstellungen erfordert, die nicht in einer Projektvorlage gekapselt werden können, enthält die Vorlage eine Infodatei mit Anweisungen zum Funktionieren der Projektvorlage in IIS. Die Dokumentation für die neue Intranetanwendungsvorlage ist auf der MSDN-Website unter der folgenden URL verfügbar:

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

Projektvorlagen unterstützen nun HTML5

Das Dialogfeld "Neues Projekt" enthält nun eine Option, mit der die Projektvorlagen um HTML5-spezifische Funktionen ergänzt werden können. Wenn Sie die Option auswählen, werden Ansichten generiert, die die neuen HTML5 <header>- , <footer>- und <navigation> -Elemente enthalten.

Beachten Sie bitte, dass ältere Browserversionen keine Unterstützung für HTML5-spezifische Tags bieten. Zur Überwindung dieser Einschränkung enthalten die HTML5-Projektvorlagen einen Verweis auf die Modernizr-Bibliothek (Siehe nächster Abschnitt.)

Projektvorlagen enthalten jetzt Modernizr 1.7

Modernizr ist eine JavaScript-Bibliothek, die die Verwendung von CSS 3 und HTML5 in Browsern ermöglicht, die diese Funktionen noch nicht unterstützen. Diese Bibliothek ist in den Vorlagen für ASP.NET MVC 3-Projekte als vorinstalliertes NuGet-Paket enthalten. Weitere Informationen zu Modernizr finden Sie unter http://www.modernizr.com/.

Neue Projektvorlagen: Aktualisierte Versionen von jQuery, jQuery UI und jQuery Validation

Die Projektvorlagen enthalten nun die folgenden Versionen der jQuery-Skripts:

  • jQuery 1.5.1
  • jQuery Validation 1.8
  • jQuery UI 1.8.11

Diese Bibliotheken sind als vorinstallierte NuGet-Pakete enthalten.

Projektvorlagen enthalten jetzt ADO.NET Entity Framework 4.1 als vorinstalliertes NuGet-Paket

Das ADO.NET Entity Framework 4.1 enthält die Code First-Funktionalität. Code First ist ein neues Entwicklungsmuster für das ADO.NET Entity Framework, das eine Alternative zu den bereits bestehenden Mustern Database First und Model First bietet.

Code First legt das Hauptaugenmerk auf die Definition Ihres Modells unter Verwendung von in Visual Basic oder C# geschriebenen POCO-Klassen (Plain Old CLR Objects). Diese Klassen können dann einer bestehenden Datenbank zugeordnet oder für die Erstellung eines Datenbankschemas verwendet werden. Zusätzliche Konfiguration kann mithilfe von DataAnnotations-Attributen oder über Fluent-APIs bereitgestellt werden.

Die Dokumentation zur Verwendung von Code First mit ASP.NET MVC ist auf der ASP.NET-Website unter den folgenden URLs verfügbar:

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

Neue Projektvorlagen: JavaScript-Bibliotheken (als vorinstallierte NuGet-Pakete)

Wenn Sie ein neues ASP.NET MVC 3-Projekt erstellen, werden die o. a. JavaScript-Daten (z. B. die Modernizr-Bibliothek) in das Projekt aufgenommen, indem sie mittels NuGet installiert werden (anstatt die Skripts direkt dem Ordner Scripts des Projekts hinzuzufügen). Auf diese Weise können Sie die Skripts mit NuGet jederzeit auf die jeweils neueste Version aktualisieren.

Bedenkt man beispielsweise die Häufigkeit neuer jQuery-Versionen, kann man mit Sicherheit davon ausgehen, dass die in der Projektvorlage enthaltene Version von jQuery irgendwann einmal veraltet sein wird. Da jQuery jedoch als installiertes NuGet-Paket enthalten ist, werden Sie im NuGet-Dialogfeld benachrichtigt, sobald eine neuere Version von jQuery verfügbar ist.

Da jQuery die Versionsnummer im Dateinamen enthält, erfordert das Aktualisieren von jQuery auf die neueste Version auch das Aktualisieren des Tags, das <script> auf die jQuery-Datei verweist, um den neuen Dateinamen zu verwenden. Andere enthaltene Skriptbibliotheken tragen keine Versionsnummer im Skriptnamen und können daher einfacher auf die jeweils neueste Version aktualisiert werden.

Bekannte Probleme in ASP.NET MVC 3

  • In einigen Fällen schlägt die Installation möglicherweise mit der Fehlermeldung "Installation fehlgeschlagen mit Fehlercode (0x80070643)" fehl. Informationen zum Umgehen dieses Problems finden Sie im KnowledgeBase-Artikel 2531566.
  • Der Gerüstbauprozess für das Hinzufügen eines Controllers berücksichtigt keine Entitäten, die von der Entitätenvererbungs-Unterstützung in Entity Framework Nutzen machen. Bei einer Person-Basisklasse, die von einer Student-Klasse geerbt wird, führt das Gerüstbau der Student-Klasse zu generiertem Code, der nicht kompiliert wird.
  • Das Erstellen eines neuen ASP.NET MVC 3-Projekts in einem Projektmappenordner verursacht einen NullReferenceException-Fehler . Erstellen Sie zur Umgehung dieses Problems das ASP.NET MVC 3-Projekt im Stammverzeichnis der Projektmappe, und verschieben Sie es dann in den Projektmappenordner.
  • IntelliSense für Razor-Syntax funktioniert nicht, wenn ReSharper installiert ist. Wenn Sie ReSharper installiert haben und die Razor IntelliSense-Unterstützung in ASP.NET MVC 3 nutzen möchten, lesen Sie den Eintrag Razor Intellisense und ReSharper im Blog von Hadi Hariri, in dem Möglichkeiten erläutert werden, sie heute gemeinsam zu verwenden.
  • Während der Installation werden die Lizenzbedingungen im Dialogfeld zum Akzeptieren des EULAs in einem zu kleinen Fenster angezeigt.
  • Beim Bearbeiten einer Razor-Ansicht (CSHTML oder .vbhtml-Datei ), Ansichten. ASP.NET MVC 3 enthält keine Codeausschnitte für Razor-Ansichten.. aspxAuswahl eines Codeausschnitts für ASP.NET MVC zeigt Codeausschnitte für
  • Wenn Sie ASP.NET MVC 3 für Visual Web Developer Express auf einem Computer installieren, auf dem Visual Studio nicht installiert ist, und später Visual Studio installieren, müssen Sie ASP.NET MVC 3 erneut installieren. Visual Studio und Visual Web Developer Express teilen Komponenten, die vom ASP.NET MVC 3-Installationsprogramm aktualisiert werden. Die gleiche Problematik tritt auf, wenn Sie ASP.NET MVC 3 für Visual Studio auf einem Computer installieren, auf dem Visual Web Developer Express nicht installiert ist, und später dann Visual Web Developer Express installieren.

Änderungen in ASP.NET MVC 3 RTM

In diesem Abschnitt werden Änderungen und Fehlerbehebungen beschrieben, die seit dem RC2-Release in der ASP.NET MVC 3 RTM-Version vorgenommen wurden.

Änderung: Version der jQuery-Benutzeroberfläche auf 1.8.7 aktualisiert

Die ASP.NET MVC-Projektvorlagen für Visual Studio wurden aktualisiert, um die neueste Version der jQuery-Ui-Bibliothek zu enthalten. Die Vorlagen enthalten auch den minimalen Satz von Ressourcendateien, die für die jQuery-Benutzeroberfläche erforderlich sind, z. B. die zugeordneten CSS- und Bilddateien.

Änderung: Der StandardmodellMetadataProvider wurde zurück in DataAnnotationsModelMetadataProvider geändert.

Im RC2-Release von ASP.NET MVC 3 wurde eine CachedDataAnnotationsMetadataProvider-Klasse eingeführt, die als Leistungsverbesserung die Zwischenspeicherung auf der vorhandenen DataAnnotationsModelMetadataProvider-Klasse bereitstellte. Bei dieser Implementierung wurden jedoch einige Fehler gemeldet, sodass die Änderung revertiert und in das MVC Futures-Projekt verschoben wurde, das unter ASP.NET WebStack verfügbar ist.

Behoben: Das Einfügen eines Teils eines Razor-Ausdrucks, der Leerzeichen enthält, führt dazu, dass er umgekehrt wird.

Wenn Sie in Vorabversionen von ASP.NET MVC 3 einen Teil eines Razor-Ausdrucks, der Leerzeichen enthält, in eine Razor-Datei einfügen, wird der resultierende Ausdruck umgekehrt. Betrachten Sie beispielsweise den folgenden Razor-Codeblock:

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

Wenn Sie den Text "first param" in der ersten Methode auswählen und ihn als Argument in die zweite Methode einfügen, lautet das Ergebnis wie folgt:

@AnotherMethod(param""first)

Das richtige Verhalten besteht darin, dass der Einfügevorgang Folgendes ergeben sollte:

@AnotherMethod("first param")

Dieses Problem wurde in der RTM-Version behoben, sodass der Ausdruck während des Einfügevorgangs ordnungsgemäß beibehalten wird.

Behoben: Beim Umbenennen einer Razor-Datei, die im Editor geöffnet wird, werden syntaxfarben und IntelliSense deaktiviert.

Das Umbenennen einer Razor-Datei mithilfe von Projektmappen-Explorer, während die Datei im Editorfenster geöffnet wird, führt dazu, dass die Syntax hervorgehoben wird und IntelliSense für diese Datei nicht mehr funktioniert. Dies wurde behoben, sodass hervorhebungen und IntelliSense nach einer Umbenennung beibehalten werden.

Bekannte Probleme für ASP.NET MVC 3 RTM

  • Wenn Sie Visual Studio 2010 SP1 Beta schließen, während die NuGet-Paket-Manager-Konsole geöffnet ist, stürzt Visual Studio ab und versucht einen Neustart. Dies wird in der RTM-Version von Visual Studio 2010 SP1 behoben.
  • Das ASP.NET MVC 3-Installationsprogramm kann nur eine erste Version des NuGet-Paket-Managers installieren. Nachdem Sie die erste Version installiert haben, kann NuGet mithilfe des Visual Studio-Erweiterungs-Managers installiert und aktualisiert werden. Wenn Sie NuGet bereits installiert haben, wechseln Sie zum Visual Studio-Erweiterungskatalog, um auf die neueste Version von NuGet zu aktualisieren.
  • Das Erstellen eines neuen ASP.NET MVC 3-Projekts in einem Projektmappenordner verursacht einen NullReferenceException-Fehler . Erstellen Sie zur Umgehung dieses Problems das ASP.NET MVC 3-Projekt im Stammverzeichnis der Projektmappe, und verschieben Sie es dann in den Projektmappenordner.
  • Das Installationsprogramm kann viel länger dauern als frühere Versionen von ASP.NET MVC. Dies liegt daran, dass Komponenten von Visual Studio 2010 aktualisiert werden.
  • IntelliSense für Razor-Syntax funktioniert nicht, wenn ReSharper installiert ist. Wenn Sie ReSharper installiert haben und die Razor IntelliSense-Unterstützung in ASP.NET MVC 3 nutzen möchten, lesen Sie den Eintrag Razor Intellisense und ReSharper im Blog von Hadi Hariri, in dem Möglichkeiten erläutert werden, sie heute gemeinsam zu verwenden.
  • CCSHTML- und VBHTML-Ansichten, die mit der Beta-Version von ASP.NET MVC 3 erstellt wurden, verfügen nicht über eine richtige Buildaktion, sodass diese Ansichtstypen bei der Veröffentlichung des Projekts nicht angegeben werden. Der Wert "Buildaktion" für diese Dateien sollte auf "Inhalt" festgelegt werden. ASP.NET MVC 3 RTM behebt dieses Problem für neue Dateien, korrigiert aber nicht die Einstellung für vorhandene Dateien für ein Projekt, das mit Vorabversionen erstellt wurde.
  • Screenshot des Dialogfelds
  • Während der Installation werden die Lizenzbedingungen im Dialogfeld zum Akzeptieren des EULAs in einem zu kleinen Fenster angezeigt.
  • Wenn Sie eine Razor-Ansicht (CSHTML-Datei) bearbeiten, ist das Menüelement Zum Controller wechseln in Visual Studio nicht verfügbar, und es gibt keine Codeausschnitte.
  • Wenn Sie ASP.NET MVC 3 für Visual Web Developer Express auf einem Computer installieren, auf dem Visual Studio nicht installiert ist, und später Visual Studio installieren, müssen Sie ASP.NET MVC 3 erneut installieren. Visual Studio und Visual Web Developer Express teilen Komponenten, die vom ASP.NET MVC 3-Installationsprogramm aktualisiert werden. Die gleiche Problematik tritt auf, wenn Sie ASP.NET MVC 3 für Visual Studio auf einem Computer installieren, auf dem Visual Web Developer Express nicht installiert ist, und später dann Visual Web Developer Express installieren.

Breaking Changes in ASP.NET MVC 3

  • In früheren Versionen von ASP.NET MVC werden Aktionsfilter pro Anforderung erstellt, außer in wenigen Fällen. Dieses Verhalten war nie ein garantiertes Verhalten, sondern lediglich ein Implementierungsdetail, und der Vertrag für Filter bestand darin, sie als zustandslos zu betrachten. In ASP.NET MVC 3 werden Filter aggressiver zwischengespeichert. Daher können alle benutzerdefinierten Aktionsfilter, die instance Zustand nicht ordnungsgemäß speichern, unterbrochen werden.
  • Die Ausführungsreihenfolge für Ausnahmefilter wurde für Ausnahmefilter mit demselben Order-Wert geändert. In ASP.NET MVC 2 und früher werden Ausnahmefilter auf dem Controller ausgeführt, die denselben Order-Wert wie die Für eine Aktionsmethode aufweisen, bevor die Ausnahmefilter für die Aktionsmethode gefiltert werden. Dies ist in der Regel der Fall, wenn Ausnahmefilter ohne angegebenen Order-Wert angewendet werden. In ASP.NET MVC 3 wurde diese Reihenfolge umgekehrt, damit der spezifischste Ausnahmehandler zuerst ausgeführt wird. Wie in früheren Versionen werden die Filter in der angegebenen Reihenfolge ausgeführt, wenn die Order-Eigenschaft explizit angegeben ist.
  • Der VirtualPathProviderViewEngine-Basisklasse wurde eine neue Eigenschaft mit dem Namen FileExtensions hinzugefügt. Wenn ASP.NET eine Ansicht nach Pfad (nicht nach Name) sucht, werden nur Ansichten mit einer Dateierweiterung berücksichtigt, die in der liste enthalten ist, die von dieser neuen Eigenschaft angegeben wird. Dies ist eine grundlegende Änderung in Anwendungen, bei denen ein benutzerdefinierter Buildanbieter registriert wird, um eine benutzerdefinierte Dateierweiterung für Webformularansichten zu aktivieren, und bei denen der Anbieter auf diese Ansichten verweist, indem er einen vollständigen Pfad anstelle eines Namens verwendet. Die Problemumgehung besteht darin, den Wert der FileExtensions-Eigenschaft so zu ändern, dass er die benutzerdefinierte Dateierweiterung einschließt.
  • Benutzerdefinierte Controller-Factoryimplementierungen, die die IControllerFactory-Schnittstelle direkt implementieren, müssen eine Implementierung der neuen GetControllerSessionBehavior-Methode bereitstellen, die der Schnittstelle in diesem Release hinzugefügt wurde. Im Allgemeinen wird empfohlen, diese Schnittstelle nicht direkt zu implementieren und stattdessen Ihre Klasse von DefaultControllerFactory abzuleiten.

Änderungen in ASP.NET MVC 3 RC2

In diesem Abschnitt werden Änderungen (neue Features und Fehlerbehebungen) beschrieben, die seit der RC-Version ASP.NET MVC 3 RC2 vorgenommen wurden.

Projektvorlagen wurden in jQuery 1.4.4, jQuery Validation 1.7 und jQuery UI 1.8.6 geändert

Die Projektvorlagen für ASP.NET MVC 3 enthalten jetzt die neuesten Versionen von jQuery, jQuery Validation und jQuery UI. Die jQuery-Benutzeroberfläche ist eine neue Ergänzung zu den Projektvorlagen und bietet nützliche Benutzeroberfläche-Widgets. Weitere Informationen zur jQuery-Benutzeroberfläche finden Sie auf der Homepage: http://jqueryui.com/.

Klasse "AdditionalMetadataAttribute" hinzugefügt

Sie können die AdditionalMetadataAttribute-Klasse verwenden, um das ModelMetadata.AdditionalValues-Wörterbuch für eine Modelleigenschaft aufzufüllen.

Angenommen, ein Ansichtsmodell verfügt über Eigenschaften, die nur einem Administrator angezeigt werden sollten. Dieses Modell kann mit dem neuen Attribut versehen werden, wobei AdminOnly als Schlüssel und true als Wert verwendet werden, wie im folgenden Beispiel gezeigt:

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

Diese Metadaten werden jeder Anzeige- oder Editorvorlage zur Verfügung gestellt, wenn ein Produktansichtsmodell gerendert wird. Es liegt an Ihnen als Anwendungsentwickler, die Metadateninformationen zu interpretieren.

Verbesserte Ansichtsgerüste

Die für Gerüstansichten verwendeten T4-Vorlagen generieren jetzt Aufrufe von Vorlagenhilfsmethoden wie EditorFor anstelle von Hilfsprogrammen wie TextBoxFor. Diese Änderung verbessert die Unterstützung für Metadaten im Modell in Form von Datenanmerkungsattributen, wenn das Dialogfeld Ansicht hinzufügen eine Ansicht generiert.

Das Gerüst "Ansicht hinzufügen" enthält auch eine verbesserte Erkennung und Verwendung von Primärschlüsselinformationen für das Modell, basierend auf der Konvention. Beispielsweise verwendet das Dialogfeld Ansicht hinzufügen diese Informationen, um sicherzustellen, dass der Primärschlüsselwert nicht als bearbeitbares Formularfeld gerüstet ist.

Die Standardvorlagen Bearbeiten und Erstellen enthalten Verweise auf die jQuery-Skripts, die für die Clientüberprüfung benötigt werden.

Html.Raw-Methode hinzugefügt

Standardmäßig codiert die Razor-Ansichts-Engine html-codiert alle Werte. Der folgende Codeausschnitt codiert beispielsweise den HTML-Code in der Begrüßungsvariablen, sodass er auf der Seite als <strong>Hello World!</strong>angezeigt wird.

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

<p>@greeting</p>

Die neue Html.Raw-Methode bietet eine einfache Möglichkeit, nicht codiertes HTML anzuzeigen, wenn der Inhalt als sicher gilt. Im folgenden Beispiel wird dieselbe Zeichenfolge angezeigt, aber die Zeichenfolge wird als Markup gerendert:

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

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

Umbenannte "Controller.ViewModel"-Eigenschaft und die Eigenschaft "View" in "ViewBag"

Zuvor entsprach die ViewModel-Eigenschaft von Controller der View-Eigenschaft einer Ansicht. Beide Eigenschaften bieten eine Möglichkeit, auf Werte des ViewDataDictionary-Objekts mithilfe der dynamischen Eigenschaftenzugriffssyntax zuzugreifen. Beide Eigenschaften wurden so umbenannt, dass sie identisch sind, um Verwechslungen zu vermeiden und konsistenter zu sein.

Umbenannte "ControllerSessionStateAttribute"-Klasse in "SessionStateAttribute"

Die ControllerSessionStateAttribute-Klasse wurde in der RC-Version von ASP.NET MVC 3 eingeführt. Die Eigenschaft wurde umbenannt, um prägnanter zu sein.

RemoteAttribute "Fields"-Eigenschaft in "AdditionalFields" umbenannt

Die Fields-Eigenschaft der RemoteAttribute-Klasse verursachte einige Verwirrung unter den Benutzern. Durch umbenennen dieser Eigenschaft in AdditionalFields wird die Absicht klargestellt.

Umbenannt in "SkipRequestValidationAttribute" in "AllowHtmlAttribute"

Das SkipRequestValidationAttribute-Attribut wurde in AllowHtmlAttribute umbenannt, um die beabsichtigte Verwendung besser darzustellen.

Die Methode "Html.ValidationMessage" wurde geändert, um die erste nützliche Fehlermeldung anzuzeigen.

Die Html.ValidationMessage-Methode wurde korrigiert, um die erste nützliche Fehlermeldung anzuzeigen, anstatt einfach den ersten Fehler anzuzeigen.

Während der Modellbindung kann das ModelState-Wörterbuch aus mehreren Quellen mit Fehlermeldungen über die Eigenschaft aufgefüllt werden, einschließlich des Modells selbst (wenn es IValidatableObject implementiert), von Validierungsattributen, die auf die Eigenschaft angewendet werden, und von Ausnahmen, die ausgelöst werden, während auf die Eigenschaft zugegriffen wird.

Wenn die Html.ValidationMessage-Methode eine Validierungsmeldung anzeigt, überspringt sie Modellzustandseinträge, die eine Ausnahme enthalten, da diese in der Regel nicht für den Endbenutzer vorgesehen sind. Stattdessen sucht die -Methode nach der ersten Validierungsmeldung, die keiner Ausnahme zugeordnet ist, und zeigt diese Meldung an. Wenn keine solche Meldung gefunden wird, wird standardmäßig eine generische Fehlermeldung angezeigt, die der ersten Ausnahme zugeordnet ist.

Die Deklaration wurde korrigiert @model , um dem Dokument keine Leerzeichen hinzuzufügen.

In früheren Versionen hat die @model Deklaration oben in einer Ansicht der gerenderten HTML-Ausgabe eine leere Zeile hinzugefügt. Dies wurde behoben, sodass die Deklaration keine Leerzeichen einführt.

Eigenschaft "FileExtensions" zu View Engines hinzugefügt, um Engine-Specific Dateinamen zu unterstützen

Eine Ansichts-Engine kann eine Ansicht mithilfe eines expliziten Ansichtspfads zurückgeben, wie im folgenden Beispiel gezeigt:

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

Die erste Ansichts-Engine versucht immer, die Ansicht zu rendern. Standardmäßig ist die Web Forms Ansichts-Engine die erste Ansichts-Engine. Da die Web Forms-Engine eine Razor-Ansicht nicht rendern kann, tritt ein Fehler auf. View-Engines verfügen jetzt über eine FileExtensions-Eigenschaft , die verwendet wird, um anzugeben, welche Dateierweiterungen sie unterstützen. Diese Eigenschaft wird überprüft, wenn ASP.NET bestimmt, ob eine Ansichts-Engine eine Datei rendern kann. Dies ist ein Breaking Change, und weitere Details sind im Abschnitt Breaking Changes dieses Dokuments enthalten.

Das "LabelFor"-Hilfsprogramm zum Ausgeben des korrekten Werts für das "For"-Attribut wurde korrigiert.

Es wurde ein Fehler behoben, bei dem die LabelFor-Methode ein for-Attribut gerendert hat, das dem name-Attribut des Eingabeelements anstelle seiner ID entspricht. Laut W3C sollte das for-Attribut mit der ID des Eingabeelements übereinstimmen.

"RenderAction"-Methode wurde behoben, um expliziten Werten Vorrang während der Modellbindung zu gewähren

In früheren Versionen wurden explizite Werte, die an die RenderAction-Methode übergeben wurden, zugunsten der aktuellen Formularwerte während der Modellbindung innerhalb einer untergeordneten Aktion ignoriert. Die Korrektur stellt sicher, dass explizite Werte während der Modellbindung Vorrang haben.

Breaking Changes in ASP.NET MVC 3 RC2

  • In früheren Versionen von ASP.NET MVC wurden Aktionsfilter pro Anforderung erstellt, außer in einigen wenigen Fällen. Dieses Verhalten war nie ein garantiertes Verhalten, sondern lediglich ein Implementierungsdetail, und der Vertrag für Filter bestand darin, sie als zustandslos zu betrachten. In ASP.NET MVC 3 werden Filter aggressiver zwischengespeichert. Daher können benutzerdefinierte Aktionsfilter, die instance Zustand nicht ordnungsgemäß speichern, unterbrochen werden.
  • Die Ausführungsreihenfolge für Ausnahmefilter wurde für Ausnahmefilter mit demselben Order-Wert geändert. In ASP.NET MVC 2 und früher wurden Ausnahmefilter auf dem Controller ausgeführt, der denselben Order-Wert wie für eine Aktionsmethode aufweist, bevor die Ausnahmefilter für die Aktionsmethode gefiltert werden. Dies ist in der Regel der Fall, wenn Ausnahmefilter ohne einen angegebenen Order-Wert angewendet werden. In ASP.NET MVC 3 wurde diese Reihenfolge umgekehrt, damit der spezifischste Ausnahmehandler zuerst ausgeführt wird. Wie in früheren Versionen werden die Filter in der angegebenen Reihenfolge ausgeführt, wenn die Order-Eigenschaft explizit angegeben wird.
  • Der VirtualPathProviderViewEngine-Basisklasse wurde eine neue Eigenschaft namens FileExtensions hinzugefügt. Wenn ASP.NET eine Ansicht nach Pfad (nicht nach Name) sucht, werden nur Ansichten mit einer Dateierweiterung berücksichtigt, die in der liste enthalten ist, die von dieser neuen Eigenschaft angegeben ist. Dies ist ein Breaking Change in Anwendungen, bei denen ein benutzerdefinierter Buildanbieter registriert wird, um eine benutzerdefinierte Dateierweiterung für Webformularansichten zu aktivieren, und bei denen der Anbieter auf diese Ansichten verweist, indem er einen vollständigen Pfad anstelle eines Namens verwendet. Die Problemumgehung besteht darin, den Wert der FileExtensions-Eigenschaft so zu ändern, dass die benutzerdefinierte Dateierweiterung eingeschlossen wird.
  • Benutzerdefinierte Controllerfactoryimplementierungen, die die IControllerFactory-Schnittstelle direkt implementieren, müssen eine Implementierung der neuen GetControllerSessionBehavior-Methode bereitstellen, die der Schnittstelle in dieser Version hinzugefügt wurde. Im Allgemeinen wird empfohlen, diese Schnittstelle nicht direkt zu implementieren und stattdessen Ihre Klasse von DefaultControllerFactory abzuleiten.

Bekannte Probleme in ASP.NET MVC 3 RC2

  • Das ASP.NET MVC 3-Installationsprogramm kann nur eine erste Version des NuGet-Paket-Managers installieren. Nachdem Sie die erste Version installiert haben, kann NuGet mithilfe des Visual Studio-Erweiterungs-Managers installiert und aktualisiert werden. Wenn Sie NuGet bereits installiert haben, wechseln Sie zum Visual Studio-Erweiterungskatalog, um auf die neueste Version von NuGet zu aktualisieren.
  • Das Erstellen eines neuen ASP.NET MVC 3-Projekts in einem Projektmappenordner verursacht einen NullReferenceException-Fehler . Erstellen Sie zur Umgehung dieses Problems das ASP.NET MVC 3-Projekt im Stammverzeichnis der Projektmappe, und verschieben Sie es dann in den Projektmappenordner.
  • Das Installationsprogramm kann viel länger dauern als vorherige Versionen von ASP.NET MVC. Dies liegt daran, dass Komponenten von Visual Studio 2010 aktualisiert werden.
  • IntelliSense für Razor-Syntax funktioniert nicht, wenn ReSharper installiert ist. Wenn Sie ReSharper installiert haben und die Razor IntelliSense-Unterstützung in ASP.NET MVC 3 RC2 nutzen möchten, lesen Sie den Eintrag Razor IntelliSense und ReSharper in Hadi Hariris Blog, in dem Möglichkeiten erläutert werden, sie heute zusammen zu verwenden.
  • Für CSHTML- und VBHTML-Ansichten, die mit der Betaversion von ASP.NET MVC 3 erstellt wurden, ist die Buildaktion nicht ordnungsgemäß festgelegt, sodass diese Ansichtstypen bei der Veröffentlichung des Projekts weggelassen werden. Der Wert der Buildaktion für diese Dateien sollte auf Content" festgelegt werden. ASP.NET MVC 3 RC2 behebt dieses Problem für neue Dateien, korrigiert jedoch nicht die Einstellung für vorhandene Dateien für ein Projekt, das mit der Betaversion erstellt wurde. Screenshot des Dialogfelds
  • Während der Installation werden die Lizenzbedingungen im Dialogfeld zum Akzeptieren des EULAs in einem zu kleinen Fenster angezeigt.
  • Wenn Sie eine Razor-Ansicht (CSHTML-Datei) bearbeiten, ist das Menüelement Zum Controller wechseln in Visual Studio nicht verfügbar, und es gibt keine Codeausschnitte.
  • Wenn Sie ASP.NET MVC 3 für Visual Web Developer Express auf einem Computer installieren, auf dem Visual Studio nicht installiert ist, und später Visual Studio installieren, müssen Sie ASP.NET MVC 3 erneut installieren. Visual Studio und Visual Web Developer Express teilen Komponenten, die vom ASP.NET MVC 3-Installationsprogramm aktualisiert werden. Die gleiche Problematik tritt auf, wenn Sie ASP.NET MVC 3 für Visual Studio auf einem Computer installieren, auf dem Visual Web Developer Express nicht installiert ist, und später dann Visual Web Developer Express installieren.
  • Durch die Installation ASP.NET MVC 3 RC 2 wird NuGet nicht aktualisiert, wenn Sie es bereits installiert haben. Wechseln Sie zum Upgrade von NuGet zum Visual Studio-Erweiterungs-Manager, und es sollte als verfügbares Update angezeigt werden. Von dort aus können Sie NuGet auf die neueste Version aktualisieren.

ASP.NET MVC 3 Release Candidate

ASP.NET MVC Release Candidate wurde am 9. November 2010 veröffentlicht.

Neue Features in ASP.NET MVC 3 RC

In diesem Abschnitt werden Features beschrieben, die seit der Betaversion in der version ASP.NET MVC 3 RC eingeführt wurden.

NuGet-Paket-Manager

ASP.NET MVC 3 enthält den NuGet-Paket-Manager (früher bekannt als NuPack), bei dem es sich um ein integriertes Paketverwaltungstool zum Hinzufügen von Bibliotheken und Tools zu Visual Studio-Projekten handelt. Dieses Tool automatisiert die Schritte, die Entwickler heute ausführen, um eine Bibliothek in ihre Quellstruktur zu integrieren.

Sie können NuGet als Befehlszeilentool, als integriertes Konsolenfenster in Visual Studio 2010, über das Visual Studio-Kontextmenü und als Satz von PowerShell-Cmdlets verwenden.

Weitere Informationen zu NuGet finden Sie in der NuGet-Dokumentation.

Verbessertes Dialogfeld "Neues Projekt"

Wenn Sie ein neues Projekt erstellen, können Sie im Dialogfeld Neues Projekt nun die Ansichts-Engine sowie einen ASP.NET MVC-Projekttyp angeben.

Screenshot des Dialogfelds

Unterstützung für das Ändern der Im Dialogfeld aufgeführten Vorlagen- und Ansichts-Engines ist in dieser Version enthalten.

Die Standardvorlagen sind die folgenden:

Leer. Enthält einen minimalen Satz von Dateien für ein ASP.NET MVC-Projekt, einschließlich der Standardverzeichnisstruktur für ASP.NET MVC-Projekte, einer Site.css-Datei, die die Standardformatvorlagen ASP.NET MVC enthält, und ein Skriptverzeichnis, das die JavaScript-Standarddateien enthält.

Internetanwendung. Enthält Beispielfunktionen, die die Verwendung des Mitgliedschaftsanbieters mit ASP.NET MVC veranschaulicht.

Die Liste der Projektvorlagen, die im Dialogfeld angezeigt wird, wird in der Windows-Registrierung angegeben.

Sitzungslose Controller

Das neue ControllerSessionStateAttribute bietet Ihnen mehr Kontrolle über das Sitzungszustandsverhalten für Controller, indem Sie einen System.Web.SessionState.SessionStateBehavior-Enumerationswert angeben.

Das folgende Beispiel zeigt, wie Der Sitzungszustand für alle Anforderungen an einen Controller deaktiviert wird.

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

    }
}

Das folgende Beispiel zeigt, wie der schreibgeschützte Sitzungszustand für alle Anforderungen an einen Controller festgelegt wird.

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

Neue Validierungsattribute

CompareAttribute

Mit dem neuen CompareAttribute-Validierungsattribut können Sie die Werte von zwei verschiedenen Eigenschaften eines Modells vergleichen. Im folgenden Beispiel muss die ComparePassword-Eigenschaft mit dem Kennwortfeld übereinstimmen, um gültig zu sein.

public class User {
    [Required]

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

RemoteAttribute

Das neue RemoteAttribute-Validierungsattribut nutzt das Remotevalidierungs-Plug-In des jQuery Validation-Plug-Ins, das es der clientseitigen Überprüfung ermöglicht, eine Methode auf dem Server aufzurufen, die die eigentliche Validierungslogik ausführt.

Im folgenden Beispiel wurde auf die UserName-Eigenschaft das RemoteAttribute angewendet. Wenn Sie diese Eigenschaft in einer Bearbeitungsansicht bearbeiten, ruft die Clientüberprüfung eine Aktion namens UserNameAvailable für die UsersController-Klasse auf, um dieses Feld zu überprüfen.

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

Das folgende Beispiel zeigt den entsprechenden Controller.

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

Standardmäßig wird der Eigenschaftenname, auf den das Attribut angewendet wird, als Abfragezeichenfolgenparameter an die Aktionsmethode gesendet.

Neue Überladungen für die Methoden "LabelFor" und "LabelForModel"

Für die Methoden LabelFor und LabelForModel wurden neue Überladungen hinzugefügt, mit denen Sie den Bezeichnungstext angeben können. Das folgende Beispiel zeigt, wie diese Überladungen verwendet werden.

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

Zwischenspeicherung untergeordneter Aktionen

OutputCacheAttribute unterstützt die Zwischenspeicherung untergeordneter Aktionen, die mithilfe der Hilfsmethoden Html.RenderAction oder Html.Action aufgerufen werden. Das folgende Beispiel zeigt eine Ansicht, die eine andere Aktion aufruft.

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

Die GetDate-Aktion wird mit dem OutputCacheAttribute versehen:

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

Wenn dieser Code ausgeführt wird, wird das Ergebnis des Aufrufs von Html.Action("GetDate") 100 Sekunden lang zwischengespeichert.

Verbesserungen des Dialogfelds "Ansicht hinzufügen"

Wenn Sie eine stark typisierte Ansicht hinzufügen, filtert das Dialogfeld Ansicht hinzufügen jetzt mehr nicht anwendbare Typen als in früheren Releases heraus, z. B. viele Kerntypen .NET Framework. Außerdem wird die Liste jetzt nach dem Klassennamen und nicht nach dem vollqualifizierten Typnamen sortiert, was das Auffinden von Typen erleichtert. Beispielsweise wird der Typname jetzt wie im folgenden Beispiel angezeigt:

ClassName (Namespace)

In früheren Releases wäre dies wie folgt angezeigt worden:

Namespace.ClassName

Granulare Anforderungsüberprüfung

Die Exclude-Eigenschaft von ValidateInputAttribute ist nicht mehr vorhanden. Verwenden Sie stattdessen das neue SkipRequestValidationAttribute, um die Anforderungsüberprüfung für bestimmte Eigenschaften eines Modells während der Modellbindung zu überspringen.

Angenommen, eine Aktionsmethode wird verwendet, um einen Blogbeitrag zu bearbeiten:

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

Das folgende Beispiel zeigt das Ansichtsmodell für einen Blogbeitrag.

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

    public string Subject {get; set;}

    public string Description {get; set;}
}

Wenn ein Benutzer Markup für die Description-Eigenschaft übermittelt, schlägt die Modellbindung aufgrund der Anforderungsüberprüfung fehl. Um die Anforderungsüberprüfung während der Modellbindung für den Blogbeitrag Beschreibung zu deaktivieren, wenden Sie das SkipRequpestValidationAttribute auf die -Eigenschaft an, wie in diesem Beispiel gezeigt:.

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

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

Um die Anforderungsüberprüfung für jede Eigenschaft des Modells zu deaktivieren, wenden Sie alternativ ValidateInputAttribute mit dem Wert false auf die Aktionsmethode an:

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

Breaking Changes in ASP.NET MVC 3 RC

  • Die Ausführungsreihenfolge für Ausnahmefilter wurde für Ausnahmefilter mit demselben Order-Wert geändert. In ASP.NET MVC 2 und früher wurden Ausnahmefilter für den Controller mit derselben Reihenfolge wie die Für eine Aktionsmethode ausgeführt, bevor die Ausnahmefilter für die Aktionsmethode gefiltert wurden. Dies ist in der Regel der Fall, wenn Ausnahmefilter ohne einen angegebenen Order-Wert angewendet werden. In ASP.NET MVC 3 wurde diese Reihenfolge umgekehrt, damit der spezifischste Ausnahmehandler zuerst ausgeführt wird. Wie in früheren Versionen werden die Filter in der angegebenen Reihenfolge ausgeführt, wenn die Order-Eigenschaft explizit angegeben ist.
  • Die neue Eigenschaft FileExtensions wurde der VirtualPathProviderViewEngine-Basisklasse hinzugefügt. Beim Suchen einer Ansicht nach Pfad (und nicht nach Name) werden nur Ansichten mit einer Dateierweiterung berücksichtigt, die in der liste enthalten ist, die durch diese neue Eigenschaft angegeben wird. Dies ist eine grundlegende Änderung für diejenigen, die einen benutzerdefinierten Buildanbieter registrieren, um eine benutzerdefinierte Dateierweiterung für Webformularansichten zu aktivieren und auf diese Ansichten zu verweisen, indem sie einen vollständigen Pfad anstelle eines Namens verwenden. Die Problemumgehung besteht darin, den Wert der FileExtensions-Eigenschaft so zu ändern, dass er die benutzerdefinierte Dateierweiterung einschließt.

Bekannte Probleme in ASP.NET MVC 3 RC

  • Das Installationsprogramm dauert möglicherweise viel länger als bei früheren Versionen von ASP.NET MVC, da komponenten von Visual Studio 2010 aktualisiert werden.
  • Das Add View-Gerüst beim Auswählen von astrongly typed view gerüstet schreibgeschützte Eigenschaften. Diese sollten beim Gerüstbau immer ignoriert werden. Das Dialogfeld Ansicht hinzufügen gerüstet auch schreibgeschützte Eigenschaften, wenn eine Ansicht "Bearbeiten" oder "Erstellen" generiert wird. Schreibgeschützte Eigenschaften sollten nur für die Ansichten Anzeige und Liste gerüstet werden.
  • Das Debuggen funktioniert nicht, wenn ASP.NET MVC 3 zusammen mit Async CTP installiert ist. ASP.NET MVC 3 kann nicht parallel mit dem Async-CTP installiert werden. Deinstallieren Sie den asynchronen CTP, um das Debuggen zu reparieren. Weitere Informationen finden Sie in diesem Blogbeitrag zum Deinstallieren aller Teile von ASP.NET MVC 3 RC.
  • Razor Intellisense funktioniert nicht, wenn Resharper installiert ist. Wenn Sie ReSharper installiert haben und die Razor intellisense-Unterstützung in ASP.NET MVC 3 RC nutzen möchten, lesen Sie diesen Blogbeitrag von JetBrains, in dem sie heute gemeinsam verwendet werden können.
  • CSHTML- und VBHTML-Ansichten, die mit Beta von ASP.NET MVC 3 erstellt wurden, verfügen nicht über eine richtige Buildaktion, sodass sie nicht veröffentlicht werden. Die Buildaktion für diese Dateien sollte auf "Inhalt" festgelegt werden. ASP.NET MVC 3 RC behebt dieses Problem für neue Dateien, korrigiert aber nicht die Einstellung für vorhandene Dateien für ein Projekt, das mit der Beta erstellt wurde.
  • Das Installationsprogramm dauert möglicherweise viel länger als bei früheren Versionen von ASP.NET MVC, da komponenten von Visual Studio 2010 aktualisiert werden.
  • Das Gerüst "Ansicht hinzufügen" beim Auswählen einer stark typisierten Ansicht "Bearbeiten" schreibgeschützte Eigenschaften. Ebenso sind schreibgeschützte Eigenschaften für "Anzeige"-Ansichten gerüstet.
  • Während der Installation werden die Lizenzbedingungen im Dialogfeld zum Akzeptieren des EULAs in einem zu kleinen Fenster angezeigt.
  • Die Installation von Visual Studio Async CTP führt zu einem Konflikt mit der Razor-Version, die als Teil der ASP.NET MVC 3-Toolinstallation enthalten ist. Stellen Sie sicher, dass Sie nicht versuchen, die Visual Studio Async-CTP-Version und die Razor-Version auf demselben Computer zu installieren.
  • Wenn Sie eine Razor-Ansicht (CSHTML-Datei) bearbeiten, ist das Menüelement Zum Controller wechseln in Visual Studio nicht verfügbar, und es gibt keine Codeausschnitte.

ASP.NET MVC 3 Beta

ASP.NET MVC 3 Beta wurde am 6. Oktober 2010 veröffentlicht. Die folgenden Hinweise sind spezifisch für die Betaversion und unterliegen allen Updates oder Änderungen, auf die oben im Abschnitt ASP.NET MVC 3 Release Candidate verwiesen wird.

Neue Featuresin ASP.NET MVC 3 Beta

In diesem Abschnitt werden Features beschrieben, die in der ASP.NET MVC 3 Beta-Version eingeführt wurden.

NuGet-Paket-Manager

ASP.NET MVC 3 enthält den NuGet-Paket-Manager, ein integriertes Paketverwaltungstool zum Hinzufügen von Bibliotheken und Tools zu Visual Studio-Projekten. In den meisten Fällen automatisiert es die Schritte, die Entwickler heute ausführen, um eine Bibliothek in ihre Quellstruktur zu integrieren.

Sie können NuGet als Befehlszeilentool, als integriertes Konsolenfenster in Visual Studio 2010, über das Visual Studio-Kontextmenü und als Satz von PowerShell-Cmdlets verwenden.

Weitere Informationen zu NuGet finden Sie in der NuGet-Dokumentation.

Verbessertes Dialogfeld "Neues Projekt"

Wenn Sie ein neues Projekt erstellen, können Sie im Dialogfeld Neues Projekt nun die Ansichts-Engine sowie einen ASP.NET MVC-Projekttyp angeben.

Screenshot des Dialogfelds

Die Unterstützung für das Ändern der Liste der im Dialogfeld aufgeführten Vorlagen und Ansichts-Engines ist in dieser Version nicht enthalten.

Die Standardvorlagen sind die folgenden:

Leer. Enthält einen minimalen Satz von Dateien für ein ASP.NET MVC-Projekt, einschließlich der Standardverzeichnisstruktur für ASP.NET MVC-Projekte, einer kleinen Datei Site.css, die die Standardformatvorlagen ASP.NET MVC enthält, und ein Skriptverzeichnis, das die JavaScript-Standarddateien enthält.

Internetanwendung. Enthält Beispielfunktionen, die die Verwendung des Mitgliedschaftsanbieters in ASP.NET MVC veranschaulicht.

Vereinfachte Methode zum Angeben stark typisierter Modelle in Razor-Ansichten

Die Möglichkeit, den Modelltyp für stark typisierte Razor-Ansichten anzugeben, wurde vereinfacht, indem die neue @model Direktive für CSHTML-Ansichten und @ModelType -Direktive für VBHTML-Ansichten verwendet wurde. In früheren Versionen von ASP.NET MVC haben Sie ein stark typisiertes Modell für Razor-Ansichten auf folgende Weise angegeben:

@inherits System.Web.Mvc.WebViewPage

In diesem Release können Sie die folgende Syntax verwenden:

@model MyModelNamespace.MyModelType

Unterstützung für neue ASP.NET Web Pages-Hilfsmethoden

Die neue ASP.NET Web Pages-Technologie enthält eine Reihe von Hilfsmethoden, die zum Hinzufügen häufig verwendeter Funktionen zu Ansichten und Controllern nützlich sind. ASP.NET MVC 3 unterstützt die Verwendung dieser Hilfsmethoden in Controllern und Ansichten (falls zutreffend). Diese Methoden sind in der System.Web.Helpers-Assembly enthalten. In der folgenden Tabelle sind einige der ASP.NET Web Pages Hilfsmethoden aufgeführt.

Helfer Beschreibung
Diagramm Rendert ein Diagramm innerhalb einer Ansicht. Enthält Methoden wie Chart.ToWebImage, Chart.Save und Chart.Write.
Crypto Verwendet Hashalgorithmen, um ordnungsgemäß gesalzene und gehashte Kennwörter zu erstellen.
Webgrid Rendert eine Auflistung von Objekten (in der Regel Daten aus einer Datenbank) als Raster. Unterstützt Paging und Sortierung.
WebImage Rendert ein Bild.
Webmail Sendet eine E-Mail.

Ein Kurzreferenzthema, in dem die Hilfsprogramme und die grundlegende Syntax aufgeführt sind, finden Sie im Rahmen der Dokumentation zur ASP.NET Razor-Syntax unter der folgenden URL:

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

Zusätzliche Unterstützung für abhängigkeitsinjektion

Aufbauend auf dem ASP.NET MVC 3 Preview 1-Release bietet das aktuelle Release zusätzliche Unterstützung für zwei neue Dienste und vier vorhandene Dienste sowie eine verbesserte Unterstützung für die Abhängigkeitsauflösung und den Common Service Locator.

Neue IControllerActivator-Schnittstelle für Fine-Grained-Controllerinstanziierung

Die neue IControllerActivator-Schnittstelle bietet eine präzisere Kontrolle darüber, wie Controller per Abhängigkeitsinjektion instanziiert werden. Das folgende Beispiel zeigt die -Schnittstelle:

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

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

Vergleichen Sie dies mit der Rolle der Controllerfactory. Eine Controllerfactory ist eine Implementierung der IControllerFactory-Schnittstelle, die sowohl für die Suche nach einem Controllertyp als auch für die Instanziierung einer instance dieses Controllertyps zuständig ist.

Controlleraktivatoren sind nur für die Instanziierung einer instance eines Controllertyps verantwortlich. Die Controllertypsuche wird nicht ausgeführt. Nachdem Sie einen richtigen Controllertyp gesucht haben, sollten Controllerfactorys an eine instance von IControllerActivator delegieren, um die tatsächliche Instanziierung des Controllers zu verarbeiten.

Die DefaultControllerFactory-Klasse verfügt über einen neuen Konstruktor, der eine IControllerFactory-instance akzeptiert. Auf diese Weise können Sie Dependency Injection anwenden, um diesen Aspekt der Controllererstellung zu verwalten, ohne das standardmäßige Nachschlageverhalten des Controllertyps außer Kraft setzen zu müssen.

IServiceLocator-Schnittstelle durch IDependencyResolver ersetzt

Basierend auf Communityfeedback hat die ASP.NET MVC 3 Beta-Version die Verwendung der IServiceLocator-Schnittstelle durch eine abgespeckte IDependencyResolver-Schnittstelle ersetzt, die speziell für die Anforderungen von ASP.NET MVC ist. Das folgende Beispiel zeigt die neue Schnittstelle:

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

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

Im Rahmen dieser Änderung wurde auch die ServiceLocator-Klasse durch die DependencyResolver-Klasse ersetzt. Die Registrierung eines Abhängigkeitslösers ähnelt früheren Versionen von ASP.NET MVC:

DependencyResolver.SetResolver(myResolver);

Implementierungen dieser Schnittstelle sollten einfach an den zugrunde liegenden Dependency Injection-Container delegiert werden, um den registrierten Dienst für den angeforderten Typ bereitzustellen.

Wenn keine registrierten Dienste des angeforderten Typs vorhanden sind, erwartet ASP.NET MVC, dass Implementierungen dieser Schnittstelle NULL von GetService zurückgeben und eine leere Auflistung von GetServices zurückgeben.

Mit der neuen DependencyResolver-Klasse können Sie Klassen registrieren, die entweder die neue IDependencyResolver-Schnittstelle oder die Common Service Locator-Schnittstelle (IServiceLocator) implementieren. Weitere Informationen zum Common Service Locator finden Sie unter CommonServiceLocator auf GitHub.

Neue IViewActivator-Schnittstelle für Fine-Grained Instanziierung von Ansichtsseiten

Die neue IViewPageActivator-Schnittstelle bietet eine präzisere Kontrolle darüber, wie Ansichtsseiten per Abhängigkeitsinjektion instanziiert werden. Dies gilt sowohl für WebFormView-Instanzen als auch für RazorView-Instanzen. Das folgende Beispiel zeigt die neue Schnittstelle:

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

Diese Klassen akzeptieren jetzt ein IViewPageActivator-Konstruktorargument, mit dem Sie mithilfe der Abhängigkeitsinjektion steuern können, wie die Typen ViewPage, ViewUserControl und WebViewPage instanziiert werden.

Neue Dependency Resolver-Unterstützung für vorhandene Dienste

Das neue Release bietet Unterstützung für die Abhängigkeitsauflösung für die folgenden Dienste:

  • Modellvalidierungsanbieter. Klassen, die ModelValidatorProvider implementieren, können im Abhängigkeitslöser registriert werden, und das System verwendet sie zur Unterstützung der client- und serverseitigen Validierung.
  • Modellmetadatenanbieter. Eine einzelne Klasse, die ModelMetadataProvider implementiert, kann im Abhängigkeitslöser registriert werden, und das System verwendet sie, um Metadaten für die Vorlagen- und Validierungssysteme bereitzustellen.
  • Wertanbieter. Klassen, die ValueProviderFactory implementieren, können im Abhängigkeitslöser registriert werden, und das System verwendet sie, um Wertanbieter zu erstellen, die vom Controller und während der Modellbindung genutzt werden.
  • Modellbinder. Klassen, die IModelBinderProvider implementieren, können im Abhängigkeitslöser registriert werden, und das System verwendet sie, um Modellbinder zu erstellen, die vom Modellbindungssystem verwendet werden.

Neue Unterstützung für unaufdringliche jQuery-basierte Ajax

ASP.NET MVC enthält Ajax-Hilfsmethoden wie die folgenden:

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

Diese Methoden verwenden JavaScript, um eine Aktionsmethode auf dem Server aufzurufen, anstatt ein vollständiges Postback zu verwenden. Diese Funktionalität wurde aktualisiert, um jQuery auf unaufdringliche Weise zu nutzen. Anstatt Inlineclientskripts zu intrusiv ausgeben, trennen diese Hilfsmethoden das Verhalten vom Markup, indem html5-Attribute mithilfe des Data-Ajax-Präfixes angegeben werden. Das Verhalten wird dann auf das Markup angewendet, indem auf die entsprechenden JavaScript-Dateien verwiesen wird. Stellen Sie sicher, dass auf die folgenden JavaScript-Dateien verwiesen wird:

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

Dieses Feature ist standardmäßig in der Web.config-Datei in den ASP.NET neuen MVC 3-Projektvorlagen aktiviert, ist aber für vorhandene Projekte standardmäßig deaktiviert. Weitere Informationen finden Sie weiter unten in diesem Dokument unter Hinzufügen anwendungsweiter Flags für die Clientvalidierung und unauffälliges JavaScript .

Neue Unterstützung für die unaufdringliche jQuery-Validierung

Standardmäßig verwendet ASP.NET MVC 3 Beta die jQuery-Validierung auf unaufdringliche Weise, um eine clientseitige Validierung durchzuführen. Um die unaufdringliche Clientvalidierung zu aktivieren, führen Sie in einer Ansicht einen Aufruf wie den folgenden aus:

Html.EnableClientValidation();

Dies erfordert, dass die ViewContext.UnobtrusiveJavaScriptEnabled-Eigenschaft auf true festgelegt ist. Dazu können Sie den folgenden Aufruf ausführen:

Html.EnableUnobtrusiveJavaScript();

Stellen Sie außerdem sicher, dass auf die folgenden JavaScript-Dateien verwiesen wird.

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

Dieses Feature ist standardmäßig in der Web.config-Datei in der ASP.NET neuen MVC 3-Projektvorlagen aktiviert, ist aber für vorhandene Projekte standardmäßig deaktiviert. Weitere Informationen finden Sie weiter unten in diesem Dokument unter Neue anwendungsweite Flags für die Clientvalidierung und unauffälliges JavaScript .

Neue Application-Wide-Flags für Clientvalidierung und unauffälliges JavaScript

Sie können die Clientvalidierung und unauffälliges JavaScript global mithilfe statischer Member der HtmlHelper-Klasse aktivieren oder deaktivieren, wie im folgenden Beispiel gezeigt:

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

Die Standardprojektvorlagen aktivieren standardmäßig unauffälliges JavaScript. Sie können diese Features auch in der Stammdatei Web.config Ihrer Anwendung mithilfe der folgenden Einstellungen aktivieren oder deaktivieren:

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

Da Sie diese Features standardmäßig aktivieren können, wurden neue Überladungen in die HtmlHelper-Klasse eingeführt, mit denen Sie die Standardeinstellungen überschreiben können, wie in den folgenden Beispielen gezeigt:

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

Aus Gründen der Abwärtskompatibilität sind beide Features standardmäßig deaktiviert.

Neue Unterstützung für Code, der vor der Ausführung von Ansichten ausgeführt wird

Sie können jetzt eine Datei mit dem Namen _viewstart.cshtml (oder _viewstart.vbhtml) im Verzeichnis Views ablegen und ihr Code hinzufügen, der von mehreren Ansichten in diesem Verzeichnis und seinen Unterverzeichnissen gemeinsam verwendet wird. Beispielsweise können Sie den folgenden Code auf der Seite _viewstart.cshtml im Ordner ~/Views einfügen:

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

Dadurch wird die Layoutseite für jede Ansicht im Ordner Ansichten und alle zugehörigen Unterordner rekursiv festgelegt. Wenn eine Ansicht gerendert wird, wird der Code in der Datei _viewstart.cshtml ausgeführt, bevor der Ansichtscode ausgeführt wird. Der code _viewstart.cshtml gilt für jede Ansicht in diesem Ordner.

Standardmäßig gilt der Code in der Datei _viewstart.cshtml auch für Ansichten in einem beliebigen Unterordner. Einzelne Unterordner können jedoch über eine eigene Version der Datei _viewstart.cshtml verfügen. in diesem Fall hat die lokale Version Vorrang. Wenn Sie beispielsweise Code ausführen möchten, der allen Ansichten für den HomeController gemeinsam ist, fügen Sie eine datei _viewstart.cshtml im Ordner ~/Views/Home ab.

Neue Unterstützung für die VBHTML-Razor-Syntax

Die vorherige ASP.NET MVC-Vorschau enthielt Unterstützung für Ansichten, die razor-Syntax basierend auf C# verwenden. Diese Ansichten verwenden die Dateierweiterung .cshtml. Im Rahmen der laufenden Arbeit zur Unterstützung von Razor führt die ASP.NET MVC 3 Beta die Unterstützung für die Razor-Syntax in Visual Basic ein, die die Dateierweiterung .vbhtml verwendet.

Eine Einführung in die Verwendung der Visual Basic-Syntax auf VBHTML-Seiten finden Sie im Tutorial unter der folgenden URL:

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

Präzisere Kontrolle über ValidateInputAttribute

ASP.NET MVC enthält immer die ValidateInputAttribute-Klasse, die die Kern-ASP.NET Anforderungsüberprüfungsinfrastruktur aufruft, um sicherzustellen, dass die eingehende Anforderung keine potenziell schädlichen Eingaben enthält. Standardmäßig ist die Eingabeüberprüfung aktiviert. Es ist möglich, die Anforderungsüberprüfung mithilfe des ValidateInputAttribute-Attributs zu deaktivieren, wie im folgenden Beispiel gezeigt:

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

Viele Webanwendungen verfügen jedoch über einzelne Formularfelder, die HTML zulassen müssen, während die übrigen Felder nicht sollten. Mit der ValidateInputAttribute-Klasse können Sie jetzt eine Liste von Feldern angeben, die nicht in die Anforderungsvalidierung einbezogen werden sollen.

Wenn Sie beispielsweise eine Blog-Engine entwickeln, sollten Sie Markup in den Feldern Text und Zusammenfassung zulassen. Diese Felder können durch zwei Eingabeelemente dargestellt werden, jedes mit einem name-Attribut, das dem Eigenschaftennamen entspricht ("Body" und "Summary"). Um die Anforderungsüberprüfung nur für diese Felder zu deaktivieren, geben Sie die Namen (durch Trennzeichen getrennt) in der Exclude-Eigenschaft der ValidateInput-Klasse an, wie im folgenden Beispiel gezeigt:

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

Hilfsprogramme konvertieren Unterstriche in Bindestriche für HTML-Attributnamen, die mithilfe anonymer Objekte angegeben werden

Mit Hilfsmethoden können Sie Attributnamen-Wert-Paare mithilfe eines anonymen Objekts angeben, wie im folgenden Beispiel gezeigt:

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

Bei diesem Ansatz können Sie keine Bindestriche im Attributnamen verwenden, da ein Bindestrich nicht für einen Eigenschaftsnamen in ASP.NET verwendet werden kann. Bindestriche sind jedoch wichtig für benutzerdefinierte HTML5-Attribute. html5 verwendet beispielsweise das Präfix "data-".

Gleichzeitig können Unterstriche nicht für Attributnamen in HTML verwendet werden, sind aber innerhalb von Eigenschaftsnamen gültig. Wenn Sie Attribute mithilfe eines anonymen Objekts angeben und die Attributnamen einen Unterstrich enthalten, konvertieren Hilfsmethoden die Unterstriche in Bindestriche. Die folgende Hilfssyntax verwendet beispielsweise einen Unterstrich:

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

Im vorherigen Beispiel wird das folgende Markup gerendert, wenn das Hilfsprogramm ausgeführt wird:

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

Fehlerbehebungen

Die Standardobjektvorlage für die Vorlagenhilfsprogramme EditorFor und DisplayFor unterstützt jetzt die in der DisplayAttribute.Order-Eigenschaft angegebene Reihenfolge. (In früheren Versionen wurde die Einstellung Order nicht verwendet.)

Die Clientvalidierung unterstützt jetzt die Überprüfung überschriebener Eigenschaften, für die Validierungsattribute angewendet werden.

JsonValueProviderFactory ist jetzt standardmäßig registriert.

Aktuelle Änderungen

Die Ausführungsreihenfolge für Ausnahmefilter wurde für Ausnahmefilter mit demselben Order-Wert geändert. In ASP.NET MVC 2 und früher wurden Ausnahmefilter auf dem Controller mit der gleichen Reihenfolge wie für eine Aktionsmethode ausgeführt, bevor die Ausnahmefilter für die Aktionsmethode gefiltert wurden. Dies ist in der Regel der Fall, wenn Ausnahmefilter ohne einen angegebenen Order-Wert angewendet werden. In ASP.NET MVC 3 wurde diese Reihenfolge umgekehrt, damit der spezifischste Ausnahmehandler zuerst ausgeführt wird. Wie in früheren Versionen werden die Filter in der angegebenen Reihenfolge ausgeführt, wenn die Order-Eigenschaft explizit angegeben ist.

Bekannte Probleme

Während der Installation werden die Lizenzbedingungen im Dialogfeld zum Akzeptieren des EULAs in einem zu kleinen Fenster angezeigt.

Razor-Ansichten verfügen weder über IntelliSense-Unterstützung noch über Syntaxherhebungen. Es wird erwartet, dass die Unterstützung der Razor-Syntax in Visual Studio in einem späteren Release enthalten sein wird.

Wenn Sie eine Razor-Ansicht (CSHTML-Datei) bearbeiten, ist das Menüelement Zum Controller wechseln in Visual Studio nicht verfügbar, und es gibt keine Codeausschnitte.

Wenn Sie die @model Syntax zum Angeben einer stark typisierten CSHTML-Ansicht verwenden, werden sprachspezifische Verknüpfungen für Typen nicht erkannt. Beispielsweise @model funktioniert int nicht, aber @model Int32 funktioniert. Die Problemumgehung für diesen Fehler besteht darin, den tatsächlichen Typnamen zu verwenden, wenn Sie den Modelltyp angeben.

Wenn Sie die @model Syntax verwenden, um eine stark typisierte CSHTML-Ansicht anzugeben (oder @ModelType eine stark typisierte VBHTML-Ansicht anzugeben), werden NULLable-Typen und Arraydeklarationen nicht unterstützt. Beispielsweise @model wird int? nicht unterstützt. Verwenden Sie stattdessen @model Nullable<Int32>. Die Syntaxzeichenfolge @model [] wird ebenfalls nicht unterstützt. Verwenden Sie @model IList<string>stattdessen .

Wenn Sie ein ASP.NET MVC 2-Projekt auf ASP.NET MVC 3 aktualisieren, müssen Sie folgendes zum Abschnitt appSettings der Web.config-Datei hinzufügen:

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

Es gibt ein bekanntes Problem, das dazu führt, dass die Formularauthentifizierung nicht authentifizierte Benutzer immer an ~/Konto/Anmeldung umleitet, wobei die in Web.config verwendete Formularauthentifizierungseinstellung ignoriert wird. Die Problemumgehung besteht darin, die folgende App-Einstellung hinzuzufügen.

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

Haftungsausschluss

© 2011 Microsoft Corporation. Alle Rechte vorbehalten. Dieses Dokument wird „wie besehen“ zur Verfügung gestellt. Die in diesem Dokument enthaltenen Informationen und zum Ausdruck gebrachten Ansichten, auch URL- und andere Internet-Websitebezüge, können ohne vorherige Ankündigung geändert werden. Sie tragen das alleinige Verwendungsrisiko.

Dieses Dokument stellt keinerlei Rechtsansprüche auf geistiges Eigentum in Microsoft-Produkten jeglicher Art bereit. Dieses Dokument darf für interne Referenzzwecke kopiert und verwendet werden.