2009-04-03 16 views
4

Aufgrund der Verwirrung zwischen allen Informationen, die über mvc aus allen Vorschau-Versionen und die eine offizielle Veröffentlichung ist ich bin sehr verwirrt, wie mit viewusercontrols umzugehen. Also sagen Sie mir ein für allemal, wie Sie dieses Beispiel implementieren:ASP.Net MVC ViewUserControl mit Controller mit MVC 1.0

Ich habe eine Liste von bevorstehenden Ereignissen, die auf mehreren Seiten meiner Website angezeigt werden müssen. Daher habe ich ein neues ViewUserControl (ListEvents.ascx) in meinem Views \ Shared-Ordner abgelegt.

ich diese ListEvents.ascx bin anfordernden auf meiner Home/Index Ansicht wie folgt zu machen:

<p> 
    Here's a list of events: 
    <% Html.RenderPartial("ListEvents");%> 
</p> 

Wie würde ich zu diesem Viewusercontrol meines Modell gehe etwa vorbei? Ich weiß, ich kann dies tun:

<p> 
    Here's a list of events: 
    <% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%> 
</p> 

Aber das scheint nicht wie ein sehr intelligentes, was zu tun ist, aus dem Innern einer Ansicht Erstellen ein neues Modells ?! Oder liege ich hier falsch? Ich kann nicht einmal einen Validierungsstatus übergeben, daher der Null-Parameter. Also eine alternative Option ist, diese Daten in den Member ViewData [] zu speichern, aber meine viewusercontrol ist nicht von den ViewData der Eltern abhängig!

Ich bin mir sicher, dass es eine sehr einfache Antwort darauf gibt, teilen Sie bitte, wie ich fertig bin im Internet für dieses Problem.

Danke!

Einfache Antwort: Ein viewusercontrol sollte immer sein Modell von der Ansicht erhalten, in der es sich befindet. Um diese zu umgehen, etwa durch Hinzufügen einer Codebehind-Datei zu einem viewusercontrol, würde das MVC-Muster brechen.

Antwort

2

Standardmäßig wird das gleiche Modell wie die Seite verwendet. Wenn Sie jeder Instanz von RenderPartial ein Modell zur Verfügung stellen möchten, ist Ihre Situation wahrscheinlich ähnlich dem Rendering mehrerer Einträge in einer Bloganwendung. Sie könnten jedes Modell aus einer Sammlung in Ihrer Seite eines Modell holen und an die Benutzersteuerung wie diese passieren.

foreach (var post in Model.Entries) { 
    Html.RenderPartial("PostTemplate", post); 
} 
+0

Ja, aber dann Modell meiner Viewusercontrol ist immer noch abhängig von dem Modell der Seite es in residiert Und das ist genau was ich vermeiden möchte. – Peter

+0

Sie hängen tatsächlich von einer einzigen Eigenschaft Ihres Modells ab, nicht vom Modell selbst. Zwei völlig unterschiedliche Modelle können dieselbe Eigenschaft haben. –

+0

Also muss ich jedes Mal, wenn ich ein viewusercontrol in einer Ansicht implementieren muss, sicherstellen, dass der Controller für diese Ansicht das Modell der Ansicht an das Modell anfügt, das meine viewusercontrol verwendet? – Peter