Laden...

Treeview Daten in ASP.NET MVC nach document.ready() nachladen

Erstellt von Telefisch vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.333 Views
T
Telefisch Themenstarter:in
372 Beiträge seit 2008
vor 5 Jahren
Treeview Daten in ASP.NET MVC nach document.ready() nachladen

Hallo Forum,
ich muss einen Treeview (bootstrap-treeview von Jon Miles) mit Daten füllen. Aufgabe dieses Treeviews ist eine Auswahl an Datensätzen anzuzeigen, die man dann als Vorlage zum Kopieren auswählt.
Da dieser Treeview aber nicht immer benötigt wird, wäre es sinnvoll ihn erst zu füllen wenn er wirklich gebraucht wird.

Dieser Tree ist derzeit in einem hidden modalen Dialog untergebracht und bekommt seine Daten als Json-Text über den ViewBag.
Nun möchte ich quasi in dem Moment wenn der modale Dialog sichtbar wird erst die Daten laden.

Idee war eine Action (JsonResult) mittels Ajax anzutriggern und die empfangenen Daten dann dem Treeview zuzuweisen.
Blöderweise muss dafür aber anscheinend die View neu geladen werden.
Wie könnte man so ein "popup"-Treeview anders erzeugen oder die Daten eben später in die View laden?

Das modale view derzeit:


    <!-- ################### Modaler Dialog zur Auswahl Copy ###################### -->
    <div class="modal fade" id="copyDialog" tabindex="-1" role="dialog" aria-labelledby="copyDialogLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <!-- Header -->
                <div class="modal-header">
                    <h5 class="modal-title" id="copyDialogLabel">Funktionsgruppe aus Vorlage kopieren</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>

                <!-- Body -->
                <div class="modal-body">
                    <form id="functionSelectForm">
                        <div id="copyTree" class=""></div>
                    </form>
                </div>

                <!-- Footer -->
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Abbrechen</button>
                    <button type="button" class="btn btn-primary" id="copyDialogOk">Ok</button>
                </div>
            </div>
        </div>
    </div>

Die Initialisierung sieht derzeit so aus:


    <!-- SCRIPTSECTION -->
    <script type="text/javascript">
// ########## COPYTREE #############
    //CopyTree Initialisieren
    var CopyTree;
    var treeData = @Html.Raw(ViewBag.copyData);
    CopyTree = $('#copyTree').treeview({
        data: treeData,
        showCheckbox: true,
        checkedIcon: "far fa-check-circle",
        uncheckedIcon: "far fa-circle",
        expandIcon: "fa fa-caret-right",
        collapseIcon: "fa fa-caret-down",
        emptyIcon: "fa",
        selectedIcon: "fa fa-map-marker-alt",
        showTags: true,
        levels: 0,
        enableLinks: true
    });
…

5.657 Beiträge seit 2006
vor 5 Jahren

MVC ist nicht direkt dafür gemacht, dynamische Seiten zu erstellen (dafür eignen sich Technologien wie Angular besser), aber du kannst z.B. per jQuery einen Ajax-Request machen, um die Daten abzuholen. Hier gibt es ein Beispiel: How to dynamically load partial view Via jquery ajax in Asp.Net MVC

Weeks of programming can save you hours of planning

T
Telefisch Themenstarter:in
372 Beiträge seit 2008
vor 5 Jahren

Ja, das Abholen der Daten ist sowiet kein Problem.
Nur wie bekomme ich sie an das Treeview gebunden, ohne die View neu zu laden?
Irgendwie stehe ich grade etwas auf'm Schlauch.

...würde man dann den Tree in eine partialview packen und nur die aktualisieren?
Geht das?

16.806 Beiträge seit 2008
vor 5 Jahren

...würde man dann den Tree in eine partialview packen und nur die aktualisieren?
Geht das?

Natürlich nicht. ASP.NET MVC ist eine reine Server Side Technologie.
Da gibt es kein "partielles Aktualisieren" von HTML aus dieser Richtung.

Alles, was Du auf dem Client auf einer Seite einzeln laden/ersetzen willst, muss per JavaScript erfolgen.
Du kannst also auf dem Server entweder Json erzeugen und das via JavaScript dann in die View einbetten, oder eben HTML und ein ganzes Element via JavaScript aktualisieren.

Aber in Anbetracht der anderen Threads scheinst Du Dich leider weder in die Web Basics noch in die ASP.NET Basics eingearbeitet zu haben.
Das ist aber leider bei Webanwendungen unerlässlich. Ohne das Verständnis, wie HTTP bzw. die Sache im Browser abläuft, wirds schwer.

T
Telefisch Themenstarter:in
372 Beiträge seit 2008
vor 5 Jahren

Ach Abt, es ist immer wieder schön wie Du einen motivieren kannst.
Kannst Du Deine Kommentare nicht einfach mal für Dich behalten?

"Du hast Dich hier nicht eingearbeitet, Deine Programmierung stinkt, Alles was Du machst ist kein best practice"

Ich hab echt langsam keinen Bock mehr auf dieses Forum.
Ich habe den ganzen Tag überlegt, gestern ob ich hier überhaupt noch ne Farge stellen darf und prompt gibt's wieder auf's Maul!

Kenn zufällig jemand ein Anfängerfreundlicheres Forum als Dieses?
Ich bin's Leid!

16.806 Beiträge seit 2008
vor 5 Jahren

Wir (oder auch ich) versuche Dich auf den richtigen Weg zu schieben. Ich verwende schließlich hier auch meine Frezeit um auch Dir weiter zu helfen.
Wenn Du Dich mit einer Technologie nicht richtig beschäftigen willst: okay. Aber was sollen wir denn dann tun, den Code für Dich schreiben?
Rede hier auch nicht von 2 Wochen Intensivkurs, sondern von wenigstens nen paar Stunden Tutorials.

Das Forum - auch andere nicht - sind nicht dazu da, dass sie Lehrer spielen und Dir die Technologie beibringen.
Foren helfen bei konkreten Problemen. Wir können aber nicht für Dich eine Technologie erlernen.
Das musst halt schon selbst machen.
Im Endeffekt ist es ja auch für Dich nicht sonderlich angenehm, wenn Du alleine nicht weiter kommst...

Wenn Dir da die Motivation fehlt, dann brauchst das nicht auf meine neutral sachlichen Aussagen schieben. 👍

T
Telefisch Themenstarter:in
372 Beiträge seit 2008
vor 5 Jahren

Wie Du meinst.