Ich habe einen Link wie diesen:
<a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>
und wenn ich darauf klicke, wird diese Teilseite aufgerufen:
@{
switch ((string)ViewBag.Details)
{
case "Profile":
{
@Html.Partial("_Profile"); break;
}
}
}
Teilseite _Profil enthält:
Html.Action("Action", "Controller", model.Paramter)
Beispiel:
@Html.Action("MemberProfile", "Member", new { id=1 }) // id is always changing
Mein Zweifel ist, wie kann ich diese "Id" an model.parameter übergeben ?
Meine Controller sind:
public ActionResult MemberHome(string id)
{
ViewBag.Details = id;
return View();
}
public ActionResult MemberProfile(int id = 0)
{
MemberData md = new Member().GetMemberProfile(id);
return PartialView("_ProfilePage",md);
}
Antworten:
Ihre Frage ist schwer zu verstehen, aber wenn ich das Wesentliche verstehe, haben Sie einfach einen Wert in Ihrer Hauptansicht, auf den Sie in einem Teil zugreifen möchten, der in dieser Ansicht gerendert wird.
Wenn Sie nur einen Teil mit nur dem Teilnamen rendern:
Es wird Ihr Modell tatsächlich als impliziten Parameter übergeben, so als ob Sie Folgendes aufrufen würden:
Damit Ihr Teil dies jedoch tatsächlich nutzen kann, muss auch ein definiertes Modell vorhanden sein, zum Beispiel:
Wenn Sie es alternativ mit einem Wert zu tun haben, der nicht im Modell Ihrer Ansicht enthalten ist (er befindet sich im ViewBag oder einem Wert, der irgendwie in der Ansicht selbst generiert wurde), können Sie a übergeben
ViewDataDictionary
Und dann:
Wie beim Modell übergibt Razor Ihrem Teil implizit
ViewData
standardmäßig die Ansicht. Wenn Sie alsoViewBag.Id
in Ihrer Ansicht hatten, können Sie dasselbe in Ihrem Teil referenzieren.quelle
@Html.Partial("_SomePartial", new Microsoft.AspNet.Mvc.ViewFeatures.ViewDataDictionary(this.ViewData) { { "id", someInteger } });
, um für mich zu arbeiten. Ich verwende VS2015 DNX 4.5.1, wenn jemand anderes das gleiche Problem hat.Eine der kürzesten Methoden, die ich bei der Suche nach mir selbst für einen einzelnen Wert gefunden habe, besteht darin, nur eine einzelne Zeichenfolge zu übergeben und die Zeichenfolge als Modell in dieser Ansicht festzulegen.
Auf Ihrer Teilrufseite
Und dann binden Sie das Modell mit Partial View wie folgt
und die Verwendung seines Wertes in der Teilansicht wie folgt
Sie können auch mit anderen Datentypen wie Array, Int oder komplexeren Datentypen wie IDictionary oder etwas anderem spielen.
Ich hoffe es hilft,
quelle
NullReferenceException
Objektreferenz ausgelöst, die nicht auf eine Instanz eines Objekts festgelegtModel
ist. Dies bedeutet , dass diese null ist. Irgendwelche Ideen?Hier ist eine Erweiterungsmethode, mit der ein Objekt in ein ViewDataDictionary konvertiert wird.
Sie können es dann in Ihrer Ansicht folgendermaßen verwenden:
Welches ist viel schöner als die
new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}
Syntax.In Ihrer Teilansicht können Sie dann
ViewBag
von einem dynamischen Objekt aus auf die Eigenschaften zugreifen, anstatt von indizierten Eigenschaften, zquelle
ToViewDataDictionary
statische Methode platzieren? Überall, wo ich es auszudrücken versuche, erhalte ich eine Art Compilerfehler.Für Asp.Net Core verwenden Sie besser
So zum Beispiel
quelle