2009-01-30 13 views
20

Ich versuche, ein ViewData Objekt von einer Masterseite zu einem Ansichtsbenutzersteuerelement zu übergeben, das das ViewDataDictionary verwendet.asp.net MVC RC1 RenderPartial ViewDataDictionary

Das Problem ist die ViewDataDictionary gibt keine Werte in der Ansicht Benutzer-Steuerelement, was auch immer ich es versuche.

Der folgende Beispielcode verwendet ein anonymen Objekt nur zur Demonstration, obwohl weder diese Methode noch ein ViewData Objekt funktioniert.

Es folgt die RenderPartial Hilfsmethode Ich versuche zu verwenden:

<% Html.RenderPartial("/Views/Project/Projects.ascx", ViewData.Eval("Projects"), new ViewDataDictionary(new { Test = "Mark" })); %> 

und meiner Ansicht nach Benutzerkontrolle i wie folgt vor:

<%= Html.Encode(ViewData["Test"]) %> 

Warum dies nichts zurück?

Danke für Ihre Hilfe.

EDIT:

Ich bin in der Lage, die stark typisierte Modell zu übergeben und Zugang ohne Probleme. es ist die ViewDataDictionary, die ich außerhalb des Modells sagen nur einen einzigen Wert zu verwenden bin versucht zu passieren ...

Antwort

5

Haben Sie versucht:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData); %> 

Auch Sie haben Viewdata überprüft [ „Test“] ist in den ViewData, bevor Sie es übergeben? Beachten Sie auch, dass es wichtig ist, das Modell gleich zu halten, wenn Sie ViewData an ein Teilsteuerelement übergeben.

Nick

+0

Danke, aber ich bin in der Lage, das Modell ohne Probleme zu bestehen. Es ist das ViewDataDictionary, das ich benutze, um nur einen Wert außerhalb des Modells zu übergeben. – Mark79

1

in der Hauptansicht:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData["Projects"]); %> 

Entweder in Sie Controller oder Hauptansicht:

ViewData["Test"] = "Mark"; 

Wenn Sie nicht über ein Modell oder eine Ansicht Datenwörterbuch angeben, in RenderPartail verwendet die Elemente aus der enthaltenden Ansicht.

5

Ich bin mit der RTM-Version von ASP.Net MVC, aber mit:

<% Html.RenderPartial("~/Views/Project/Projects.ascx", new ViewDataDictionary(new {Key = "Some value"})); %> 

Versuchen Sie Folgendes, wenn Sie den Wert in der Teilansicht Referenzierung:

<%= ViewData.Eval("Key") %> 

Das zu haben scheint habe den Trick für mich gemacht. Es wird auch funktionieren, wenn Sie nur Folgendes tun:

Ich hoffe, dies hilft.

10

Ich weiß nicht, ob jemand noch interessiert, aber ich habe eine KeyValuePair für das ViewDataDictionary verwendet.

<% Html.RenderPartial("ItemRow", item, new ViewDataDictionary{ 
     new KeyValuePair<string, object>("url", url), 
     new KeyValuePair<string, object>("count", count), 
     new KeyValuePair<string, object>("className", className) 
}); %> 

Auf diese Weise können Sie alles in einer Aussage schreiben.Die KVPs kann in der Ansicht zugegriffen werden.

<%= ViewData["url"] %> 
<%= ViewData["count"] %> 
<%= ViewData["className"] %> 

Während das, was ich durch das Modell übergeben kann durch Modell zugegriffen werden *

33

Dies ist der sauberste Weg, den ich gesehen habe, dies zu tun:

<% Html.RenderPartial("/Views/Project/Projects.ascx", Model, new ViewDataDictionary{{"key","value"}});%> 

Es kann ein wenig hackish sein, aber es lässt Sie das Modell durch UND einige zusätzliche Daten senden.

+0

Danke! Es klappt! –

Verwandte Themen