Können Sie anstelle eines ganzseitigen Beitrags einfach eine Teilansicht aktualisieren?

Lesezeit: 4 Minuten

Benutzer-Avatar
Rayshawn

Gibt es eine Möglichkeit, ein Teilansichtsformular in asp.net mvc zu übermitteln, ohne die übergeordnete Seite neu zu laden, aber die Teilansicht nur in den neuen Zustand neu zu laden? Ähnlich wie bei der Aktualisierung von knockout.js mit data-bind.

Meine Datentabelle wird mit einer variablen Anzahl von Spalten/Namen gerendert, daher denke ich nicht, dass knockout.js eine Option für diese ist, also versuche ich stattdessen, eine Teilansicht zu verwenden.

Benutzer-Avatar
mattytommo

Nicht ohne jQuery.

Was Sie tun müssten, ist Ihr Partial in ein div zu setzen, etwa so:

<div id="partial">
    @Html.Partial("YourPartial")
</div>

Dann zum Aktualisieren (zum Beispiel durch Klicken auf eine Schaltfläche mit der ID button), du könntest es tun:

$("#button").click(function () {
   $.ajax({
       url: "YourController/GetData",
       type: "get",
       data: $("form").serialize(), //if you need to post Model data, use this
       success: function (result) {
           $("#partial").html(result);
       }
   });
})

Dann würde Ihre Aktion in etwa so aussehen:

public ActionResult GetData(YourModel model) //that's if you need the model
{
    //do whatever

    return View(model);
}

  • Dies ist eine nette Lösung für jemanden, der sich mit Webentwicklung auskennt, aber nicht mit c# mvc.

    – Mussafa

    3. Oktober 2017 um 20:24 Uhr

  • @MurWade Es tut mir leid, ich verstehe nicht, warum diese Lösung nicht auf jemanden anwendbar ist, der MVC & C# verwendet? Können Sie das näher erläutern?

    – Joey Bob

    17. Oktober 2017 um 11:20 Uhr

  • @JoeyBob Dies gilt für alle, die MVC & C# verwenden. Sie können eine Sache auf viele Arten tun, und diese Methode scheint der verständlichste Ansatz für jemanden zu sein, der Webentwickler (Single-Page-Apps, Ajax usw.) gemacht hat, aber nicht mvc c#. Mit mvc c# können Sie auch das Update-Panel verwenden, aber das ist nicht so einfach.

    – Mussafa

    17. Oktober 2017 um 20:13 Uhr


Benutzer-Avatar
Dave Alperowitsch

Wenn Ihr Teil eine untergeordnete Aktionsmethode hat, können Sie tatsächlich direkt zur untergeordneten Aktion posten (oder sogar einen Ankerlink verwenden) und einen Ajax-ähnlichen Effekt erzielen. Wir tun dies in mehreren Ansichten.

Die Syntax ist

@Html.Action("MyPartial")

Die untergeordnete Aktion ist

public ActionResult MyPartial()
{
    return PartialView(Model);
}

Wenn Ihr Formular an die untergeordnete Aktion gesendet wird

@using (Html.BeginForm("MyPartial"))
{
    ...
}

Die Teilansicht wird mit der Teilansicht aktualisiert, die von der untergeordneten Aktion zurückgegeben wird.

Jquery ist immer noch ein legitimer Weg, um einen Partial zu aktualisieren. Aber technisch gesehen lautet die Antwort auf Ihre Frage JA.

  • Probiere das auch mal aus.

    – Rayshawn

    28. Februar 2013 um 23:22 Uhr

  • Dave, kannst du näher darauf eingehen, wie das funktioniert? Ich hätte erwartet, dass dies dazu führen würde, dass die vom geposteten Formular zurückgegebene Teilansicht als neue Seite angezeigt und nicht an Ort und Stelle aktualisiert wird.

    – JohnnyHK

    1. März 2013 um 15:02 Uhr

  • @JohnnyHK, das hätte ich auch erwartet. Überraschenderweise führt dies dazu, dass die Teilansicht nicht anstelle der Elternansicht an die Elternansicht zurückgegeben wird. Wirkt wie ein Ajax-Aufruf.

    – Dave Alperowitsch

    1. März 2013 um 15:14 Uhr


  • das scheint einfach genug zu sein, außer dass ich es nicht verstehe 🙂 Woher kommt die @Html.Action(“MyPartial”) gehen

    – Alin I

    27. März 2017 um 11:41 Uhr

  • Im MVC5 Html.BeginForm("string") ruft die Erweiterungsüberladung auf BeginForm(this HtmlHelper htmlHelper, object routeValues) und ergibt a POST /?Length=N. Ich bin der Meinung, dass diese Antwort “funktioniert” ein unbeabsichtigtes Verhalten ist.

    – Jassen

    8. Juli 2017 um 21:03 Uhr


Wenn ich nach solchen Dingen suche, finde ich normalerweise, dass die Leute zu begrenzte Informationen geben, also werde ich versuchen, hier zu helfen. Der Schlüssel besteht darin, ein div mit einer ID einzurichten, an die Sie die Rückgabe-HTML anhängen können. Achten Sie auch beim Anschlagen Ihres Controllers darauf, dass er den Teilton zurückgibt. Es gibt einige potenzielle Probleme mit dieser Methode, aber an einem guten Tag sollte es funktionieren.

<div id="CategoryList" class="widget">
    @{
        Html.RenderPartial("WidgetCategories.cshtml");
    }
</div>

          function DeleteCategory(CategoryID) {
            $.get('/Dashboard/DeleteWidgetCategory?CategoryID=' + CategoryID,
                function (data) {
                    if (data == "No") {
                        alert('The Category has report widgets assigned to it and cannot be deleted.');
                    }
                    else {
                        $('#CategoryList').html(data);
                    }

                }
            );
        }


    [HttpGet("DeleteWidgetCategory")]
    [HttpPost("DeleteWidgetCategory")]
    public IActionResult DeleteWidgetCategory(string CategoryID)
    {
        string Deleted = CategoryModel.DeleteCategory(CategoryID);

        if (Deleted == "Yes")
        {
            return PartialView("WidgetCategories");
        }
        else
        {
            return this.Json("No");
        }
    }

Ich würde den Ajax-Formularhelfer für solche Szenarien mit einer Teilansicht und @html.RenderPartial(“partialName”) verwenden.
teilweise Helfer

Benutzer-Avatar
Pramesh

In Ihrer Hauptansicht

<div id=SearchResult>
   @Html.Partial("_NameOfPartialView", Model)
</div>

<input type="button" id="btnSubmit" value="Submit">

In Ihrer Javascript-Datei

$('#btnSubmit').click(function () {
    GetData(Id);
});

function GetData(Id){
  $.ajax({
     url: "/Home/GetEmployee/",
     type: "get",
     data: { Id:Id },
     success: function (result) {
     $('#SearchResult').html(result);
     }
   });
}

In Ihrem Home-Controller

public ActionResult GetEmployee(int Id)
{
   var employee= context.Employee.Where(x=> x.EmployeeId == Id)

   return this.PartialView("_NameOfPartialView", employee);
}

1246020cookie-checkKönnen Sie anstelle eines ganzseitigen Beitrags einfach eine Teilansicht aktualisieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy