2008-09-03 24 views
11

Wie viele andere auf dieser Website erwäge ich einen Wechsel zu ASP.NET MVC für zukünftige Projekte. Zur Zeit laufen auf meinen Seiten die traditionellen ASP.NET 2.0 Web Forms, und es funktioniert für uns OK, also ist meine andere Option, einfach bei dem zu bleiben, was ich weiß und den Wechsel zu ASP.NET 3.5 mit den integrierten AJAX-Sachen zu machen.Wie können Benutzersteuerelemente in ASP.NET MVC am besten implementiert werden?

Ich frage mich, wie Benutzersteuerelemente in ASP.NET MVC funktionieren. Wir haben Tonnen von .ASCX Kontrollen und einige zusammengesetzte Kontrollen. Wenn ich mit Webdesignern arbeite, ist es sehr einfach, sie dazu zu bringen, ASCX-Steuerelemente effektiv zu verwenden, auch ohne Programmierkenntnisse. Das ist ein definitives Plus. Die Nachteile sind jedoch der Seitenlebenszyklus, der unerträglich sein kann, und die Tatsache, dass ASCX-Steuerelemente nur schwer zwischen verschiedenen Projekten ausgetauscht werden können. Composite-Steuerelemente sind gemeinsam nutzbar, aber grundsätzlich eine Black Box für einen Designer.

Was ist das Modell in ASP.NET MVC? Gibt es eine Möglichkeit, Steuerelemente zu erstellen, die die Probleme beheben, mit denen wir ASCX und Composite-Steuerelemente behandelt haben? Es ist eine wichtige Überlegung, Webdesignern einen einfachen Zugang zu ermöglichen, ohne sich Sorgen darüber machen zu müssen, dass Code kaputt geht.

Antwort

8

Um eine Benutzersteuerung Sie den folgenden Aufruf implementieren:

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %> 

Sie können auch die ältere Syntax sehen, die als von PR5 nicht mehr gültig

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %> 

Sie werden immer Sorgen machen müssen ist über Code-Breaking beim Wechsel von Web Forms zu MVC, aber das ASP.NET MVC-Team hat eine großartige Arbeit geleistet, um die Probleme zu minimieren.

1

Wie Nick vorgeschlagen hat, werden Sie zwar in der Lage sein, Ihre Benutzersteuerelemente zu rendern, aber offensichtlich funktionieren der Seitenzyklus, Seitenstatus und Postback von herkömmlichen ASP Webforms nicht mehr.

Ich denke, dass Sie die meisten Ihrer komplexen Steuerelemente umschreiben müssen, um Ihre Website in MVC zu portieren, während einfache Steuerelemente, die zum Beispiel nur Formatierung und keinen Postback-Status bieten, einfach funktionieren sollten. Der von Nick zur Verfügung gestellte Code wird in diesem Fall einfach funktionieren.

Und über die Freigabe zwischen mehreren Projekten: Ich denke, Steuerelemente werden mehr wie "wiederverwendbare HTML-Rendering-Komponenten", die auf einer Website geteilt werden können, anstatt "wiederverwendbare Code-Komponenten" mit Logik (wie WebForms-Steuerelemente). Ihre Weblogik wird/sollte in den Seitencontrollern und nicht in den HTML-Steuerelementen enthalten sein. Daher ist die Freigabe von Steuerelementen über mehrere Projekte hinweg nicht so nützlich wie im WebForms-Fall.

1

Ja, Sie können RenderPartial tun. Das ist ein guter Anfang. Aber irgendwann brauchen diese Leute Logik und andere Controller-Sachen. Halten Sie Ausschau nach einer Subcontroller-Implementierung aus dem Framework-Team. Es sollte bald auch etwas in MvcContrib geben. Oder rollen Sie Ihre eigenen.

Edit: ich gerade über diese hier gepostet: http://mhinze.com/subcontrollers-in-aspnet-mvc/

+2

Dies hat eine tote Verbindung. – chrish

1

MVC anderen Seite Lebenszyklus zu vergleichen, um Ihren Benutzer Kontrolle hat.

Sie können dies als neu schreiben betrachten.

Die aspx ist die Ansicht. Sie brauchen immer noch ein Neuschreiben, die Syntax ist anders. JavaScript wird funktionieren. Aber ich finde kaum, dass die WebControls funktionieren.Weil MVC Viewstate und Postback nicht mehr hat.

Für den Code hinter (aspx.cs) müssen Sie dies zu einem Controller Klasse konvertieren. Page_Load Methode wird nicht mehr funktionieren. Wahrscheinlich überlassen Sie es Index() Methode.

Modell ist einfach die Entity-Klassen, die Ihr Code hinter konsumieren.

Fazit, es ist eine komplette Neuschreibung. Prost. Glückliche Kodierung.

Verwandte Themen