3 Stimmen

Übergabe von ViewData an PartialView, das mit Html.Action zurückgegeben wurde

Ich möchte eine partielle Ansicht in eine ASP.NET MVC-Seite einbetten, indem ich sie von einer Aktionsmethode zurückbringe.

Meiner Ansicht nach hätte ich das getan:

<%= Html.Action("MyPartialViewAction") %>

Mein Controller würde eine Action-Methode haben wie:

[ChildActionOnly]
public ActionResult MyPartialViewAction()
{
    return PartialView("MyPartialView");
}

Ich habe erwartet, dass die zurückgegebene Teilansicht (MyPartialView) Zugriff auf die ViewData hat, die in der Controller-Aktion der Basisseite festgelegt wurde, aber das scheint nicht der Fall zu sein. Wenn ich die partielle Ansicht einfüge, indem ich das Folgende in meiner Basisansicht verwende, funktioniert es:

<% Html.RenderPartial("MyPartialView") %>

Ich möchte nicht tun, dass aber, weil ich meine "MyPartialViewAction" Logik ausführen, um zu bestimmen, WELCHE Teilansicht zurückgegeben werden soll.

3voto

tvanfosson Punkte 506878

Ich glaube, dass es tatsächlich einen neuen Controller erstellt, was bedeutet, dass jede Ansicht, die es erstellt, die ViewData von diesem Controller hat, nicht der Controller, der die Ansicht erstellt hat, die die Aktionsmethode aufruft. Sie könnten es versuchen:

  1. Refaktorieren Sie Ihre Auswahllogik in eine separate Methode und verwenden Sie diese in Ihrer ursprünglichen Aktion, um den Namen der Teilansicht auszuwählen. Füllen Sie das in Ihrem Modell und verwenden Sie es über RenderPartial.
  2. Verwenden Sie TempData (oder direkt Session), um die ViewData der vorherigen Aktion zu speichern und die ViewData des neuen Controllers daraus zu hydrieren.
  3. Wenn die benötigten Daten begrenzt sind, übergeben Sie sie im RouteValueDictionary - Ihre Aktion müsste diese als Parameter erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X