Laden...

MVC-Client: PartialView updaten

Erstellt von emuuu vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.396 Views
emuuu Themenstarter:in
286 Beiträge seit 2011
vor 6 Jahren
MVC-Client: PartialView updaten

Guten Tag zusammen,

ich habe mal eine Frage in Zusammenhang mit PartialViews:
Da ich eine etwas größere Tabelle anzeigen möchte (~1000ms responsetime) würde ich diese gerne in eine PartialView verschieben, sodass die gesamte restliche View geladen wird und dann die Abfrage an die API geht.

Im Controller habe dafür ich zwei Actions:
Index() und GetCategories() wobei Index die "leere" View zurückgibt und GetCategories ruft die API. Wobei beide das gleiche ViewModel zurückgeben (Index mit einem leeren IEnumerable, Get mit einem gefüllten).

Hier der Auszug aus der Index.cshtml:


<div id="dvCategoryResults">
    @{Html.RenderPartial("CategoryResults", Model);}
</div>

<script type="text/javascript">
    $(document).ready(function () {
               $('#dvCategoryResults').load(@Url.Action("GetCategories", "Overview"));
        });
</script>

Mein Problem ist nun, dass das .load() niemals im Overview-Controller ankommt. Es wird ausgeführt (breakpoint im script wird erreicht), aber es passiert nichts. Auch in den Logs steht nichts was irgendwie darauf hindeutet.

Das Script ist direkt in der View.cshtml, es kann also nicht am @Url liegen (was bei ausgelagerten Scripten der Fall wäre), wobei ich auch schon die direkte Url versucht habe (/Overview/GetCategories).

Ergänzung


<script src="~/lib/jquery/dist/jquery.js"></script>

Wir bereits in _Layout.cshtml geladen, das Fehlen dessen kann es also eigentlich auch nicht sein.

Hab leider keine weiteren Ideen und bin für Ratschläge offen

Besten Dank im Voraus
emuuu

2+2=5( (für extrem große Werte von 2)

D
261 Beiträge seit 2015
vor 6 Jahren

Schon mal in den Netzwerk Tab der Entwicklertools geschaut? Wird dort überhaupt eine Antwort angezeigt?

emuuu Themenstarter:in
286 Beiträge seit 2011
vor 6 Jahren

Habs, mit @section klappts nun:


@section scripts {
    <script>
    $(document).ready(function () {
               $('#dvCategoryResults').load(@Url.Action("GetCategories", "Overview"));
        });
    </script>
}

2+2=5( (für extrem große Werte von 2)

16.807 Beiträge seit 2008
vor 6 Jahren

Das dürfte aber ungültig sein, denn load() will einen String; und da würden zumindest bei diesem Code bei Dir die Hochkomma fehlen.
Ohnehin sollte man besser Routes statt Actions verwenden, sofern es sich um etwas mehr als eine Hobby Software handelt (best practise).

Überall Document-Ready zu verwenden ist ohnehin nicht so der glückliche Griff.
Warum bettest Du überall JavaScript in Views ein und machst das nicht über eine entsprechendes Framework wie Vue.js, das für solch einen Zweck existiert?

Das über Sections zu machen gehört leider mittlerweile zu den Bad Practises.
Hab aber auch noch Software, in der ich das so gemacht habe - und aufgrund der Menge und der extrem schlechten Übersichtlichkeit einfach nur bereue.