Freigeben über


ASP.NET MVC 3

(umfasst das Update der Tools vom April 2011)

ASP.NET MVC 3 ist ein Framework zum Erstellen skalierbarer, standardsbasierter Webanwendungen mit bewährten Entwurfsmustern und der Leistungsfähigkeit von ASP.NET und .NET Framework.

Es installiert parallel mit ASP.NET MVC 2, also beginnen Sie noch heute mit der Verwendung!

Laden Sie das Installationsprogramm hier herunter.

Wichtigste Features

  • Integriertes Gerüstsystem erweiterbar über NuGet
  • HTML 5-aktivierte Projektvorlagen
  • Ausdrucksstarke Ansichten, einschließlich des neuen Razor View Engine
  • Leistungsstarke Hooks mit Abhängigkeitsinjektions- und globalen Aktionsfiltern
  • Rich-JavaScript-Unterstützung mit unauffälliger JavaScript-, jQuery-Validierungs- und JSON-Bindung
  • Lesen der vollständigen Funktionsliste unten

Neuigkeiten in ASP.NET MVC 3

Installation und Hilfe

ASP.NET MVC 3 Übersicht

ASP.NET MVC 3 baut auf ASP.NET MVC 1 und 2 auf und fügt großartige Features hinzu, die sowohl Ihren Code vereinfachen als auch eine tiefere Erweiterbarkeit ermöglichen. Dieses Thema bietet eine Übersicht über viele der neuen Features, die in dieser Version enthalten sind, die in den folgenden Abschnitten organisiert sind:

Erweiterbares Gerüst mit MvcScaffold-Integration

Das neue Gerüstsystem erleichtert es ihnen, produktiv zu arbeiten, wenn Sie völlig neu im Framework sind, und allgemeine Entwicklungsaufgaben zu automatisieren, wenn Sie erfahren sind und bereits wissen, was Sie tun.

Dies wird von dem neuen NuGet-Gerüstpaket mit dem Namen "MvcScaffolding" unterstützt. Der Begriff "Gerüst" wird von vielen Softwaretechnologien verwendet, um "schnell eine grundlegende Gliederung Ihrer Software zu generieren, die Sie dann bearbeiten und anpassen können". Das Gerüstpaket, das wir für ASP.NET MVC erstellen, ist in mehreren Szenarien von großem Vorteil:

  • Wenn Sie ASP.NET MVC zum ersten Mal lernen, da es Ihnen eine schnelle Möglichkeit gibt, nützliche, funktionierenden Code zu erhalten, die Sie dann bearbeiten und entsprechend Ihren Anforderungen anpassen können. Es spart Ihnen das Trauma, eine leere Seite zu betrachten und keine Vorstellung davon zu haben, wo sie beginnen sollen!
  • Wenn Sie ASP.NET MVC gut kennen und jetzt einige neue Add-On-Technologien wie einen objektrelationalen Mapper, ein Ansichtsmodul, eine Testbibliothek usw. erkunden, da der Ersteller dieser Technologie möglicherweise auch ein Gerüstpaket dafür erstellt hat.
  • Wenn Ihre Arbeit wiederholt ähnliche Klassen oder Dateien irgendeiner Art erstellt, da Sie benutzerdefinierte Gerüste erstellen können, die Testinstallationen, Bereitstellungsskripts oder alles andere, was Sie benötigen, ausgeben. Jeder in Ihrem Team kann auch Ihre benutzerdefinierten Gerüste verwenden.

Weitere Features in MvcScaffolding sind:

  • Unterstützung für C#- und VB-Projekte
  • Unterstützung für die Razor- und ASPX-Ansichtsmodule
  • Unterstützt den Gerüstbau in ASP.NET MVC-Bereichen und die Verwendung von benutzerdefinierten Masterseiten/Ansichtslayouts.
  • Sie können die Ausgabe ganz einfach anpassen, indem Sie T4-Vorlagen bearbeiten.
  • Sie können völlig neue Gerüste mit benutzerdefinierter PowerShell-Logik und benutzerdefinierten T4-Vorlagen hinzufügen. Diese (und alle benutzerdefinierten Parameter, die Sie ihnen zugewiesen haben) werden automatisch in der Konsolen-Tab-Vervollständigungsliste angezeigt.
  • Sie können NuGet-Pakete abrufen, die zusätzliche Gerüste für unterschiedliche Technologien enthalten (z. B. gibt es jetzt ein Proof-of-Concept für LINQ to SQL) und mischen und kombinieren sie zusammen.

Das ASP.NET MVC 3 Tools Update enthält eine großartige Visual Studio-Unterstützung für dieses Gerüstsystem, z. B.:

  • Das Dialogfeld "Controller hinzufügen" unterstützt jetzt die vollständige automatische Gerüsterstellung von Aktionen zum Erstellen, Lesen, Aktualisieren und Löschen von Controllern und entsprechenden Ansichten. Dieses Gerüst generiert standardmäßig Datenzugriffscode mithilfe von EF Code First.
  • Das Dialogfeld "Controller hinzufügen" unterstützt erweiterbare Gerüste über NuGet-Pakete wie MvcScaffolding. Auf diese Weise können Sie benutzerdefinierte Gerüste in das Dialogfeld einfügen, wodurch Sie Gerüste für andere Datenzugriffstechnologien wie NHibernate oder sogar JET mit ODBCDirect erstellen können, wenn Sie so geneigt sind!

Weitere Informationen zum Gerüst in ASP.NET MVC 3 finden Sie in den folgenden Ressourcen:

HTML 5-Projektvorlagen

Das Dialogfeld "Neues Projekt" enthält ein Kontrollkästchen zum Aktivieren von HTML 5-Versionen von Projektvorlagen. Diese Vorlagen nutzen Modernizr 1.7, um Kompatibilitätsunterstützung für HTML 5 und CSS 3 in Browsern auf unterer Ebene bereitzustellen.

Die Razor View Engine

ASP.NET MVC 3 kommt mit einem neuen Ansichtsmodul namens Razor, das die folgenden Vorteile bietet:

  • Die Razorsyntax ist sauber und prägnant und erfordert eine minimale Anzahl von Tastenanschlägen.
  • Razor ist einfach zu erlernen, weil sie auf vorhandenen Sprachen wie C# und Visual Basic basiert.
  • Visual Studio enthält IntelliSense und Codefarbisierung für Razor-Syntax.
  • Razor-Ansichten können als Unit-Test getestet werden, ohne die Anwendung ausführen oder einen Webserver starten zu müssen.

Einige neue Razor-Features umfassen Folgendes:

  • @model Syntax zum Angeben des Typs, der an die Ansicht übergeben wird.
  • @* *@ Kommentarsyntax.
  • Die Möglichkeit, Standardwerte (z. B. layoutpage) einmal für eine gesamte Website anzugeben.
  • Die Html.Raw Methode zum Anzeigen von Text ohne HTML-Codierung.
  • Unterstützung für die Freigabe von Code zwischen mehreren Ansichten (_viewstart.cshtml oder _viewstart.vbhtml-Dateien).

Razor enthält auch neue HTML-Hilfsprogramme, z. B. folgendes:

  • Chart. Rendert ein Diagramm, das dieselben Features wie das Diagrammsteuerelement in ASP.NET 4 bietet.
  • WebGrid. Rendert ein Datenraster, vollständig mit Paging- und Sortierfunktionen.
  • Crypto. Verwendet Hashingalgorithmen, um ordnungsgemäß gesalzene und hashierte Kennwörter zu erstellen.
  • WebImage. Rendert ein Bild.
  • WebMail. Sendet eine E-Mail.

Weitere Informationen zu Razor finden Sie in den folgenden Ressourcen:

Unterstützung für mehrere View-Engines

Im Dialogfeld "Ansicht hinzufügen " in ASP.NET MVC 3 können Sie das Ansichtsmodul auswählen, mit dem Sie arbeiten möchten, und im Dialogfeld "Neues Projekt " können Sie das Standardansichtsmodul für ein Projekt angeben. Sie können das Web Forms-Ansichtsmodul (ASPX), Razor oder ein Open-Source-Ansichtsmodul wie Spark, NHaml oder NDjango auswählen.

Controllerverbesserungen

Globale Aktionsfilter

Manchmal möchten Sie logik ausführen, bevor eine Aktionsmethode ausgeführt wird oder nachdem eine Aktionsmethode ausgeführt wird. Um dies zu unterstützen, stellte ASP.NET MVC 2 Aktionsfilter bereit. Aktionsfilter sind benutzerdefinierte Attribute, die ein deklaratives Mittel zum Hinzufügen von Voraktions- und Post-Action-Verhalten zu bestimmten Controlleraktionsmethoden bieten. In einigen Fällen möchten Sie jedoch möglicherweise Voraktions- oder Post-Action-Verhalten angeben, das für alle Aktionsmethoden gilt. Mit MVC 3 können Sie globale Filter angeben, indem Sie sie der GlobalFilters Auflistung hinzufügen. Weitere Informationen zu globalen Aktionsfiltern finden Sie in den folgenden Ressourcen:

Neue Eigenschaft "ViewBag"

MVC 2-Controller unterstützen eine ViewData Eigenschaft, mit der Sie Daten mithilfe einer spät gebundenen Wörterbuch-API an eine Ansichtsvorlage übergeben können. In MVC 3 können Sie auch eine etwas einfachere Syntax mit der ViewBag Eigenschaft verwenden, um denselben Zweck zu erreichen. Anstatt beispielsweise zu schreiben ViewData["Message"]="text", können Sie schreiben ViewBag.Message="text". Sie müssen keine stark typierten Klassen definieren, um die ViewBag Eigenschaft zu verwenden. Da es sich um eine dynamische Eigenschaft handelt, können Sie stattdessen nur Eigenschaften abrufen oder festlegen und diese dynamisch zur Laufzeit auflösen. ViewBag Intern werden Eigenschaften als Name/Wert-Paare im ViewData Wörterbuch gespeichert. (Hinweis: In den meisten Vorabversionen von MVC 3 wurde die ViewBag Eigenschaft als Eigenschaft bezeichnet ViewModel .)

Neue "ActionResult"-Typen

Die folgenden ActionResult Typen und entsprechenden Hilfsmethoden sind in MVC 3 neu oder erweitert:

  • HttpNotFoundResult. Gibt einen 404 HTTP-Statuscode an den Client zurück.
  • RedirectResult. Gibt einen temporären Umleitungscode (HTTP 302-Statuscode) oder einen permanenten Umleitungscode (HTTP 301-Statuscode) zurück, abhängig von einem booleschen Parameter. In Verbindung mit dieser Änderung verfügt die Controller-Klasse jetzt über drei Methoden zum Ausführen dauerhafter Umleitungen: RedirectPermanent, , RedirectToRoutePermanentund RedirectToActionPermanent. Diese Methoden geben eine Instanz von RedirectResult zurück, bei der die Eigenschaft Permanent auf true gesetzt ist.
  • HttpStatusCodeResult. Gibt einen vom Benutzer angegebenen HTTP-Statuscode zurück.

Verbesserungen bei JavaScript und Ajax

Standardmäßig verwenden Ajax- und Validierungshilfsprogramme in MVC 3 einen unauffälligen JavaScript-Ansatz. Unauffälliges JavaScript verhindert, dass Inline-JavaScript in HTML eingefügt wird. Dadurch wird Ihr HTML-Code kleiner und übersichtlicher und erleichtert das Austauschen oder Anpassen von JavaScript-Bibliotheken. Validierungshilfsprogramme in MVC 3 verwenden standardmäßig auch das jQueryValidate Plug-In. Wenn Sie das MVC 2-Verhalten verwenden möchten, können Sie unauffälliges JavaScript mithilfe einer web.config Dateieinstellung deaktivieren. Weitere Informationen zu JavaScript- und Ajax-Verbesserungen finden Sie in den folgenden Ressourcen:

Client-Side-Validierung standardmäßig aktiviert

In früheren MVC-Versionen müssen Sie die Html.EnableClientValidation Methode explizit aus einer Ansicht aufrufen, um die clientseitige Überprüfung zu aktivieren. In MVC 3 ist dies nicht mehr erforderlich, da die clientseitige Überprüfung standardmäßig aktiviert ist. (Sie können dies mithilfe einer Einstellung in der dateiweb.config deaktivieren.)

Damit die clientseitige Überprüfung funktioniert, müssen Sie weiterhin auf die entsprechenden jQuery- und jQuery-Validierungsbibliotheken auf Ihrer Website verweisen. Sie können diese Bibliotheken auf Ihrem eigenen Server hosten oder von einem CdN (Content Delivery Network, CDN) wie den CDNs von Microsoft oder Google aus referenzieren.

Fernvalidierer

ASP.NET MVC 3 unterstützt die neue RemoteAttribute-Klasse , mit der Sie die Unterstützung des jQuery Validation-Plug-Ins für remote validator nutzen können. Dadurch kann die clientseitige Überprüfungsbibliothek automatisch eine benutzerdefinierte Methode aufrufen, die Sie auf dem Server definieren, um Validierungslogik auszuführen, die nur serverseitig ausgeführt werden kann.

Im folgenden Beispiel gibt das Remote-Attribut an, dass die Clientüberprüfung eine Aktion namens UserNameAvailable in der UsersController-Klasse aufruft, um das UserName-Feld zu validieren.

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

Weitere Informationen zur Verwendung des Remote Attributs finden Sie unter How to: Implement Remote Validation in ASP.NET MVC in the MSDN library.

JSON-Bindungsunterstützung

ASP.NET MVC 3 enthält integrierte JSON-Bindungsunterstützung, mit der Aktionsmethoden JSON-codierte Daten empfangen und an Aktionsmethodenparameter gebunden werden können. Diese Funktion ist in Szenarien mit Clientvorlagen und Datenbindung hilfreich. (Mithilfe von Clientvorlagen können Sie ein einzelnes Datenelement oder eine gruppe von Datenelementen mithilfe von Vorlagen formatieren und anzeigen, die auf dem Client ausgeführt werden.) Mit MVC 3 können Sie Clientvorlagen problemlos mit Aktionsmethoden auf dem Server verbinden, die JSON-Daten senden und empfangen. Weitere Informationen zur JSON-Bindungsunterstützung finden Sie im Abschnitt "JavaScript- und AJAX-Verbesserungen" des MVC 3 Preview-Blogbeitrags von Scott Guthrie.

Verbesserungen bei der Modellüberprüfung

"DataAnnotations" Metadatenattribute

ASP.NET MVC 3 unterstützt DataAnnotations Metadatenattribute wie DisplayAttribute.

"ValidationAttribute"-Klasse

Die ValidationAttribute Klasse wurde in .NET Framework 4 verbessert, um eine neue IsValid Überladung zu unterstützen, die weitere Informationen zum aktuellen Überprüfungskontext bereitstellt, z. B. welches Objekt überprüft wird. Dies ermöglicht umfangreichere Szenarien, in denen Sie den aktuellen Wert basierend auf einer anderen Eigenschaft des Modells überprüfen können. Mit dem neuen CompareAttribute Attribut können Sie beispielsweise die Werte zweier Eigenschaften eines Modells vergleichen. Im folgenden Beispiel muss die ComparePassword Eigenschaft mit dem Password Feld übereinstimmen, um gültig zu sein.

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

Validierungsschnittstellen

Die IValidatableObject-Schnittstelle ermöglicht es Ihnen, eine Überprüfung auf Modellebene durchzuführen, und sie ermöglicht es Ihnen, Validierungsfehlermeldungen bereitzustellen, die für den Status des Gesamtmodells oder zwischen zwei Eigenschaften innerhalb des Modells spezifisch sind. MVC 3 ruft jetzt Fehler aus der IValidatableObject Schnittstelle ab, wenn die Modellbindung erfolgt, und markiert die betroffenen Felder in einer Ansicht automatisch mithilfe der integrierten HTML-Formularhilfsprogramme.

Die IClientValidatable-Schnittstelle ermöglicht ASP.NET MVC zur Laufzeit zu ermitteln, ob ein Validator Unterstützung für die Clientüberprüfung hat. Diese Schnittstelle wurde entwickelt, damit sie in eine Vielzahl von Validierungsframeworks integriert werden kann.

Weitere Informationen zu Validierungsschnittstellen finden Sie im Abschnitt " Model Validation Improvements" des MVC 3 Preview-Blogbeitrags von Scott Guthrie. (Beachten Sie jedoch, dass der Verweis auf "IValidateObject" im Blog "IValidatableObject" lauten sollte.)

Verbesserungen der Abhängigkeitsinjektion

ASP.NET MVC 3 bietet eine bessere Unterstützung für die Verwendung von Dependency Injection (DI) und die Integration mit Dependency Injection- oder Inversion of Control-Containern (IoC). Unterstützung für DI wurde in den folgenden Bereichen hinzugefügt:

  • Controller (Registrieren und Einfügen von Controllerfabriken, Injizieren von Controllern).
  • Ansichten (Registrierung und Injektion von View-Engines, Injektion von Abhängigkeiten in Ansichtsseiten).
  • Aktionsfilter (Suchen und Einfügen von Filtern).
  • Modellbinder (Registrieren und Einfügen).
  • Modellüberprüfungsanbieter (Registrieren und Einfügen).
  • Modellmetadatenanbieter (Registrieren und Einfügen).
  • Wertanbieter (Registrieren und Einfügen).

MVC 3 unterstützt die Common Service Locator-Bibliothek und alle DI-Container, die die Schnittstelle dieser Bibliothek IServiceLocator unterstützen. Es unterstützt auch eine neue IDependencyResolver Schnittstelle, die die Integration von DI-Frameworks erleichtert.

Weitere Informationen zu DI in MVC 3 finden Sie in den folgenden Ressourcen:

Weitere neue Features

NuGet-Integration

ASP.NET MVC 3 installiert und aktiviert NuGet als Teil der Einrichtung. NuGet ist ein kostenloser Open-Source-Paket-Manager, der das Auffinden, Installieren und Verwenden von .NET-Bibliotheken und -Tools in Ihren Projekten erleichtert. Es funktioniert mit allen Visual Studio-Projekttypen (einschließlich ASP.NET Web Forms und ASP.NET MVC).

NuGet ermöglicht Entwicklern, die Open Source-Projekte verwalten (z. B. Projekte wie Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks und Elmah), ihre Bibliotheken zu packen und in einem Onlinekatalog zu registrieren. Es ist dann einfach für .NET-Entwickler, die eine dieser Bibliotheken verwenden möchten, um das Paket zu finden und in Projekten zu installieren, an denen sie arbeiten.

Mit dem ASP.NET 3 Tools Update enthalten die Projektvorlagen JavaScript-Bibliotheken als vorinstallierte NuGet-Pakete, sodass sie über NuGet aktualisierbar sind. Entity Framework Code First ist auch als NuGet-Paket vorinstalliert.

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

Teilseiten-Ausgabezwischenspeicherung

ASP.NET MVC hat seit Version 1 das Zwischenspeichern der Gesamten Seitenantworten unterstützt. MVC 3 unterstützt auch die Zwischenspeicherung teilweiser Seiten, sodass Sie Regionen oder Fragmente einer Antwort problemlos zwischenspeichern können. Weitere Informationen zum Zwischenspeichern finden Sie im Abschnitt "Partial Page Output Caching" des Blogbeitrags von Scott Guthrie zum MVC 3-Releasekandidaten und zum Abschnitt "Child Action Output Caching" der MVC 3-Versionshinweise.

Granulare Kontrolle über Anforderungsvalidierung

ASP.NET MVC verfügt über eine integrierte Anforderungsüberprüfung, die automatisch zum Schutz vor XSS- und HTML-Einfügungsangriffen beiträgt. Manchmal möchten Sie die Anforderungsüberprüfung jedoch explizit deaktivieren, z. B. wenn Benutzer HTML-Inhalte bereitstellen möchten (z. B. in Blogeinträgen oder CMS-Inhalten). Sie können jetzt ein AllowHtml-Attribut zu Modellen oder Ansichtsmodellen hinzufügen, um die Anforderungsüberprüfung pro Eigenschaft während der Modellbindung zu deaktivieren. Weitere Informationen zur Anforderungsüberprüfung finden Sie in den folgenden Ressourcen:

Erweiterbares Dialogfeld "Neues Projekt"

In ASP.NET MVC 3 können Sie Dem Dialogfeld " Neues Projekt " Projektvorlagen, Ansichtsmodule und Komponententestprojektframeworks hinzufügen.

Verbesserungen von Vorlagengerüsten

ASP.NET MVC 3-Gerüstvorlagen sind besser geeignet, Primärschlüsseleigenschaften für Modelle zu identifizieren und entsprechend zu behandeln als in früheren MVC-Versionen. (Beispielsweise stellen die Gerüstvorlagen jetzt sicher, dass der Primärschlüssel nicht als bearbeitbares Formularfeld erstellt wird.)

Standardmäßig verwenden die Gerüste zum Erstellen und Bearbeiten jetzt das Html.TextBoxFor Hilfsprogramm anstelle des Html.EditorFor Hilfsprogramms. Dadurch wird die Unterstützung für Metadaten im Modell in Form von Datenanmerkungsattributen verbessert, wenn das Dialogfeld "Ansicht hinzufügen " eine Ansicht generiert.

Neue Überladungen für "Html.LabelFor" und "Html.LabelForModel"

Für die Hilfsmethoden LabelFor und LabelForModel wurden neue Methodenüberladungen hinzugefügt. Mit den neuen Überladungen können Sie den Label-Text spezifizieren oder überschreiben.

Unterstützung für Sessionless Controller

In ASP.NET MVC 3 können Sie angeben, ob eine Controllerklasse den Sitzungszustand verwenden soll und falls ja, ob der Sitzungszustand Lese-/Schreibzugriff oder nur Lesezugriff haben soll. Weitere Informationen zur Unterstützung von zustandslosen Controllern finden Sie in den MVC 3-Versionshinweisen.

Neue Klasse "AdditionalMetadataAttribute"

Sie können das AdditionalMetadata-Attribut verwenden, um das ModelMetadata.AdditionalValues Wörterbuch für eine Modelleigenschaft aufzufüllen. Wenn beispielsweise ein Ansichtsmodell über eine Eigenschaft verfügt, die nur für einen Administrator angezeigt werden soll, können Sie diese Eigenschaft kommentieren, wie im folgenden Beispiel gezeigt:

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

Diese Metadaten werden für jede Anzeige- oder Editorvorlage verfügbar gemacht, wenn ein Produktansichtsmodell gerendert wird. Es liegt an Ihnen, die Metadateninformationen zu interpretieren.

Verbesserungen bei AccountController

Die AccountController in der Internetprojektvorlage wurde erheblich verbessert.

Neue Intranetprojektvorlage

Eine neue Intranetprojektvorlage ist enthalten, die die Windows-Authentifizierung ermöglicht und den AccountController entfernt.