webentwicklung-frage-antwort-db.com.de

asp.net MVC-Teilansicht-Controller-Aktion

Ich bin sehr neu in der Entwicklung von Web-Apps und dachte, ich würde mit der neuesten Technologie beginnen. Deshalb versuche ich, asp.net und das MVC-Framework auf einmal zu lernen. Dies ist wahrscheinlich eine sehr einfache Frage für Sie, MVC-Profis.

Meine Frage ist, ob einer Teilansicht eine Aktion zugeordnet sein sollte. Wenn ja, wird diese Aktion immer dann aufgerufen, wenn eine normale Seite RenderPartial() für die Teilansicht verwendet.

76
yogibear

Während Sie eine Aktion haben können, die eine Teilansicht zurückgibt, benötigen Sie keine Aktion, um eine Teilansicht zu rendern. RenderPartial nimmt die Teilansicht und rendert sie unter Verwendung der angegebenen Modell- und Ansichtsdaten (falls angegeben) in die aktuelle (übergeordnete) Ansicht.

Möglicherweise möchten Sie eine Aktion, die eine Teilansicht zurückgibt, wenn Sie AJAX zum Laden/Neuladen eines Teils einer Seite verwenden. In diesem Fall ist die Rückgabe der vollständigen Ansicht nicht erwünscht, da Sie nur eine Neuladung durchführen möchten In diesem Fall kann die Aktion nur die Teilansicht zurückgeben, die dem Abschnitt der Seite entspricht.

Standardmechanismus

Teilansicht in einer normalen Ansicht verwenden (keine Aktion erforderlich)

...some html...
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
...more html..

Ajax-Mechanismus

Neuladen eines Teils einer Seite über AJAX (Notizenteil wird beim ersten Laden der Seite inline gerendert)

...some html...
<div id="partial">
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
</div>
...more html...

<script type="text/javascript">
   $(function() {
       $('#someButton').click( function() {
           $.ajax({
              url: '/controller/action',
              data: ...some data for action...,
              dataType: 'html',
              success: function(data) {
                 $('#partial').html(data);
              },
              ...
           });
       });
   });
</script>

Controller für AJAX

public ActionResult Action(...)
{
     var model = ...

     ...

     if (Request.IsAjaxRequest())
     {
          return PartialView( "Partial", model.PartialModel );
     }
     else
     {
          return View( model );
     }
}
134
tvanfosson

Die akzeptierte Antwort ist völlig korrekt, aber ich möchte hinzufügen, dass Sie Ihre Teilansicht mit jQuery load laden können. Weniger Konfiguration erforderlich, wenn Sie keine Parallelität berücksichtigen möchten.

$("#Your-Container").load("/controller/action/id");
3
Saeid

Die Antwort ist nein. Manchmal ist jedoch eine Controller-Aktion hinter einer Teilansicht erforderlich. Anschließend können Sie eine actionMethod erstellen, die eine Teilansicht zurückgibt. Diese actionMethod kann in einer anderen Sicht aufgerufen werden:

@Html.Action("StockWarningsPartial", "Stores")

Die Aktionsmethode kann folgendermaßen aussehen:

public ActionResult StockWarningsPartial()
{
      ....              
      return View("StockWarningsPartial", warnings);

}

und die Ansicht 'StockWarningsPartial.cshtml' beginnt mit:

@{
    Layout = null;
}

damit wird das umgebende Layout nicht erneut gerendert.

2
Peter

Mit dieser Logik konnte ich etwas Ähnliches erreichen.

Innerhalb der .cshtml

@Html.Action("ActionMethodName", "ControllerName");

Innerhalb des Controllers

[Route("some-action")]
public ActionResult ActionMethodName()
{
    var someModel = new SomeModel();
    ...
    return PartialView("SomeView.cshtml", someModel);
}

Und das ist es.

Wenn Sie Werte aus der .cshtml-Datei an die action-Methode übergeben müssen, ist dies möglich.

1
Bern