2009-04-08 11 views
0

Was ist der Ersatz für ein Serversteuerelement in ASP.NET MVC? Was ich tun möchte, ist eine deklarative zu schaffen und unbedingt verbindlich, so kann ichAlternativen zu Serversteuerelementen in MVC

<cc1:MyControl Header="Some Header" Content="Some Content" /> 

schreiben, dass eine Instanz der MyControl Klasse bedeuten würde, wird

<h1>Some Header</h1> 
<p>Content</p> 

I don zu

erstellt und möglicherweise wiedergegeben werden Ich will keinen Viewstate oder Postback-Mist, nur die Modularität. Ich möchte auch, dass diese Module in einer separaten Klassenbibliothek enthalten sind, so dass ViewUserControls für mich nicht geeignet ist. Die normale Verwendung eines Server-Steuerelements funktioniert, aber es generiert ein Formular-Tag und ein View-Status-Feld, das ich nicht möchte, wenn ich es vermeiden kann.

Ich habe this question und this one über die Verwendung von Serversteuerelementen in ASP.NET MVC gesehen, aber sie bieten keine ausreichende Antwort.

Bearbeiten: Ich fand die Antwort. Als ich das Benutzersteuerelement mithilfe des Designers hinzugefügt habe, wurde automatisch ein <Formular> erstellt, das ich vermisste. Wenn ich einfach dieses Tag entferne, funktioniert alles perfekt.

Antwort

2

Sie können weiterhin alle Steuerelemente in ASP.NET MVC verwenden, wenn sie das Rendern in einem Serverformular nicht erfordern.

ascx Dateien und @Register Direktiven funktionieren immer noch ziemlich gut. Die großartige neue Sache ist Html.RenderPartial Methode, mit der Sie ein Modellobjekt zu einer Teilansicht (ascx) übergeben und entsprechend rendern können.

+0

Wie die Frage sagt, ist mein Problem, dass wenn ich ein Serversteuerelement erstelle, das Formular gerendert wird, was ich nicht will. – erikkallen

+1

Dies gilt nicht für alle Steuerelemente. Das ist das Problem mit der spezifischen Steuerung, nicht ASP.NET MVC. –

+0

Das Steuerelement, mit dem ich getestet habe, ist ein leeres Steuerelement (ich habe ein Server Control-Projekt erstellt und ich teste mit dem standardmäßigen ServerControl1). Wie muss ich es ändern, um den Ansichtszustand zu entfernen? – erikkallen

0

nur das Hinzufügen einer weiteren Möglichkeit zu Mehrdad Antwort, Sie Erweiterungsmethoden zu tun, um eine einfache Steuerung wie diese verwenden:

<%= html.MyControl("Some header", "Some content") %> 


<Extension()> _ 
Public Function MyControl(ByVal htmlHelper As HtmlHelper, _ 
         ByVal Header As String, _ 
         ByVal Content As String) As String 

Dim sb As New StringBuilder() 
sb.AppendFormat("<h1>{0}</h1>", Header) 
sb.AppendFormat("<p>{0}</p>", Content) 
Return sb.ToString() 
End Function 

Oder Sie eine komplexere Steuerung wie in diesem Beispiel machen: Create an ASP.NET MVC GridView Helper Method

+0

Tut mir leid, es ist zu einfach. Ich möchte, dass meine Benutzer den VS2008-Designer verwenden können. – erikkallen

0

Neben den Steuerelementen, die noch mit ASP.Net MVC funktionieren, können Sie mvc Steuerelemente verwenden.

UPDATE: Diese Antwort war für ASP.Net MVC 1.0 im Jahr 2009. Es ist veraltet und an dieser Stelle irrelevant.

+0

Heads-Up: Beide Links sind kaputt. –