Ich habe eine stark typisierte Teilansicht, die ein ProductImage verwendet. Wenn es gerendert wird, möchte ich auch einige zusätzliche ViewData bereitstellen, die ich dynamisch auf der enthaltenden Seite erstelle. Wie kann ich mit dem Aufruf "RenderPartial" sowohl mein stark typisiertes Objekt als auch meine benutzerdefinierten ViewData an die Teilansicht übergeben?
var index = 0;
foreach (var image in Model.Images.OrderBy(p => p.Order))
{
Html.RenderPartial("ProductImageForm", image); // < Pass 'index' to partial
index++;
}
RenderPartial verwendet einen anderen Parameter, der einfach ein ViewDataDictionary ist. Sie sind fast da, nennen Sie es einfach so:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary { { "index", index } }
);
Beachten Sie, dass dadurch die Standard-ViewData überschrieben wird, die alle Ihre anderen Ansichten standardmäßig haben. Wenn Sie etwas zu ViewData hinzufügen, wird es nicht in diesem neuen Wörterbuch enthalten, das Sie an Ihre Teilansicht übergeben.
Um das zu erweitern, was womp gepostet hat, können Sie View View View View [View Data] weitergeben, wobei die View Data-Daten beibehalten werden, wenn Sie die Konstruktorüberladung der ViewDataDictionary
verwenden:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary(this.ViewData) { { "index", index } }
);
@Html.Partial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } })
or
@{Html.RenderPartial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } });}
Teilseite (_Header):
<div class="row titleBlock">
<h1>@ViewData["HeaderName"].ToString()</h1>
<h5>@ViewData["TitleName"].ToString()</h5>
</div>
Ich denke das sollte nicht funktionieren?
ViewData["currentIndex"] = index;
Erstellen Sie eine andere Klasse, die Ihre stark typisierte Klasse enthält.
Fügen Sie der Klasse Ihr neues Material hinzu und geben Sie es in der Ansicht zurück.
Stellen Sie dann in der Ansicht sicher, dass Sie Ihre neue Klasse erben und die Codebits ändern, die jetzt fehlerhaft sind. nämlich die Verweise auf Ihre Felder.
Hoffe das hilft. Wenn nicht, dann lass es mich wissen und ich werde einen spezifischen Code posten.
Die einfachste Möglichkeit, zusätzliche Daten zu übergeben, besteht darin, die Daten zu den vorhandenen ViewData als @Joel Martinez-Notizen für die Ansicht hinzuzufügen. Wenn Sie ViewData jedoch nicht verschmutzen möchten, verfügt RenderPartial über eine Methode, die drei Argumente sowie die angezeigte Version mit zwei Argumenten akzeptiert. Das dritte Argument ist ein ViewDataDictionary. Sie können ein separates ViewDataDictionary für Ihr Partial erstellen, das nur die zusätzlichen Daten enthält, die Sie übergeben möchten.
this.ViewData.Add ("index", index);
Html.RenderPartial ( "ProductImageForm", Image, This.ViewData );
Das sollte auch funktionieren.
Sie können die dynamische Variable ViewBag verwenden
ViewBag.AnotherValue = valueToView;