Frage

Ich bin sehr neu in der Entwicklung von Web-Apps und dachte, ich würde mit der jüngsten Technologie beginnen und ich versuche, ASP.NET AS-Well als MVC-Framework gleichzeitig zu lernen. Dies ist wahrscheinlich eine sehr einfache Frage für Sie, MVC -Profis.

Meine Frage ist, sollte eine teilweise Ansicht eine zugeordnete Aktion haben, und wenn ja, wird diese Aktion aufgerufen, wenn eine normale Seite verwendet wird RenderPartial() auf die Teilansicht?

War es hilfreich?

Lösung

Während Sie eine Aktion haben können, die eine teilweise Ansicht zurückgibt, benötigen Sie keine Aktion, um eine teilweise Ansicht zu erzielen. RenderPartial nimmt die teilweise Ansicht und macht es mit dem angegebenen Modell und den Ansichtsdaten in die aktuelle (übergeordnete) Ansicht.

Möglicherweise möchten Sie eine Aktion, die eine Teilansicht zurückgibt, wenn Sie AJAX zum Laden/Laden Sie einen Teil einer Seite neu. In diesem Fall ist die Rückgabe der vollständigen Ansicht nicht erwünscht, da Sie nur einen Teil der Seite neu laden möchten. In diesem Fall können Sie die Aktion nur die teilweise Ansicht zurückgeben, die diesem Abschnitt der Seite entspricht.

Standardmechanismus

Nutzung einer Teilansicht innerhalb einer normalen Ansicht (keine Aktion erforderlich)

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

Ajax -Mechanismus

Das Laden eines Teils einer Seite über AJAX neu (beachten Sie, dass teilweise in der ersten Seite geladen wird).

...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 );
     }
}

Andere Tipps

Die akzeptierte Antwort ist völlig korrekt, aber ich möchte hinzufügen, dass Sie Ihre Teilansicht mit JQuery -Last laden können. Weniger Konfiguration benötigt, wenn Sie nicht über die Parallelität berücksichtigen möchten.

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

Die Antwort ist nein. Aber manchmal benötigen Sie eine Controller -Aktion hinter einer Teilansicht. Anschließend können Sie einen ActionMethod erstellen, der eine Teilansicht zurückgibt. Dieser ActionMethod kann in eine andere Ansicht aufgerufen werden:

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

Der ActionMethod kann aussehen:

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

}

und die Ansicht 'StockWarningspartial.cshtml' beginnt mit:

@{
    Layout = null;
}

Damit es Ihr umgebendes Layout nicht wieder rendert.

Ich konnte mit dieser Logik etwas Ähnliches erreichen.

Innerhalb des .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 von der .cshtml an die Aktionsmethode übergeben müssen, ist dies möglich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top