Ist ASP.NET MVC 1 vorwärts kompatibel mit ASP.NET MVC 2?

8

Kann ich eine MVC 1-Anwendung ohne Probleme mit den MVC 2-Baugruppen ausführen? Ich verstehe, dass einige Tools von Drittanbietern in MVC 2 kaputt gegangen sind, aber nehmen wir an, ich benutze keine anderen Tools.

    
Gabe 04.02.2010, 19:11
quelle

3 Antworten

7

Es gab Änderungen zu brechen .

Wenn Sie möchten, dass ein 1.0-Projekt unter 2.0 ausgeführt wird, sucht es an verschiedenen Orten nach Dingen. Sie müssten also die Anwendung auf 2.0 migrieren. .

Hier sind die Änderungen, die möglicherweise "brechen" könnten (aktuell ab Vorschau 2):

Änderungen in Vorschau 2

Helfer geben jetzt ein MvcHtmlString -Objekt

zurück

Um die neue HTML-codierende Ausdruckssyntax in ASP.NET 4 zu nutzen, ist der Rückgabetyp der HTML-Helfer nun MvcHtmlString anstelle von string . Beachten Sie, dass Sie die HTML-Codierungssyntax nicht nutzen können, wenn Sie ASP.NET MVC 2 und die neuen Hilfsprogramme mit ASP.NET 3.5 verwenden. Die neue Syntax ist nur verfügbar, wenn Sie ASP.NET MVC 2 unter ASP.NET 4 ausführen.

JsonResult reagiert jetzt nur auf HTTP POST-Anfragen

Um JSON-Hijacking-Angriffe, die die Offenlegung von Informationen ermöglichen, zu minimieren, antwortet die JsonResult -Klasse standardmäßig nur auf HTTP POST -Anforderungen. AJAX-GET-Aufrufe an Aktionsmethoden, die ein JsonResult -Objekt zurückgeben, sollten geändert werden, um stattdessen POST zu verwenden. Bei Bedarf können Sie dieses Verhalten überschreiben, indem Sie die neue Eigenschaft JsonRequestBehavior von JsonResult festlegen. Weitere Informationen über den potenziellen Exploit finden Sie im Blogbeitrag JSON Hijacking auf Phil Haacks Blog.

Model- und ModelType-Property-Setter in ModelBindingContext sind veraltet

Eine neue einstellbare Eigenschaft ModelMetadata wurde zur Klasse ModelBindingContext hinzugefügt. Die neue Eigenschaft enthält die Eigenschaften Model und ModelType . Obwohl die Eigenschaften Model und ModelType veraltet sind, funktionieren die Eigenschaften-Getter aus Gründen der Abwärtskompatibilität immer noch. Sie delegieren an die Eigenschaft ModelMetadata , um den Wert abzurufen.

Änderungen in Vorschau 1

Die DefaultControllerFactory -Klasse ändert die benutzerdefinierten Controller-Factorys, die davon abgeleitet werden

Diese Änderung betrifft benutzerdefinierte Controller-Factorys, die von DefaultControllerFactory abgeleitet sind. Die DefaultControllerFactory-Klasse wurde behoben, indem die Eigenschaft RequestContext entfernt und stattdessen die Anforderungskontextinstanz an die geschützten virtuellen Methoden GetControllerInstance und GetControllerType übergeben wurde.

Benutzerdefinierte Controller-Factorys werden häufig verwendet, um die Abhängigkeitsinjektion für ASP.NET MVC-Anwendungen bereitzustellen.

Um die benutzerdefinierten Controllerfactorys zur Unterstützung von ASP.NET MVC 2 zu aktualisieren, ändern Sie die Methodensignatur oder -signaturen so, dass sie den neuen Signaturen entsprechen, und verwenden Sie anstelle der Eigenschaft den Anforderungskontextparameter.

"Area" ist jetzt ein reservierter Route-Value-Key

Die Zeichenfolge "area" in Route-Werten hat jetzt in ASP.NET MVC eine besondere Bedeutung, genau wie "controller" und "action". Eine Implikation ist, dass, wenn HTML-Helfer mit einem Route-Value-Wörterbuch, das "Bereich" enthält, versorgt werden, die Helfer nicht mehr "Bereich" in die Anfrage-Zeichenkette einfügen werden.

Wenn Sie die Funktion "Bereiche" verwenden, vergewissern Sie sich, dass {area} nicht als Teil Ihrer Routen-URL verwendet wird.

Bekannte Probleme

Das Dialogfeld Ansicht hinzufügen löst eine NullReferenceException aus, wenn das Kontrollkästchen Stark typisierte Ansicht erstellen aktiviert ist, eine andere Inhaltsauswahl als "Leer" ausgewählt ist und ein Name der Datenklassenklasse für einen vorhandenen Typ angegeben ist . Wenn Sie einen Typnamen angeben, verwenden Sie entweder die Dropdown-Liste, um den Typnamen auszuwählen, oder geben Sie den vollständig qualifizierten Typnamen ein. Für nicht vorhandene Typen müssen Sie Inhalt anzeigen auf "Leer" setzen.

    
George Stocker 04.02.2010, 19:14
quelle
1

Sehen Sie sich dieses Dokument an. Sie werden über die Veränderungen lernen: Ссылка

    
Tomasz Jaskuλa 04.02.2010 19:16
quelle
1

Ein Fehler, der mich gebissen hat ist, dass alle Felder eines Modells jetzt immer auf einem Post validiert sind.

Die Änderungen werden von Brad Wilson beschrieben hier .

Steve Anderson Blogpost beschreibt das Problem und meine Lieblingslösung (mit einem benutzerdefinierten Validator).

    
jslatts 13.04.2010 14:33
quelle