Aufruf von Funktionen ...



  • Hallo zusammen, ich finde mal wieder nichts. Wie ruft man von JavaScript MVC Controller auf ? Und umgekehrt, vom Controller JavaScript Funktionen ?



  • Du solltest die verwendeten Technologien schon dazuschreiben. Wegen Deiner älteren Threads gehe ich von ASP.NET aus.

    Hilft Calling ASP.NET MVC Action Methods from JavaScript?



  • Ja ! Ich verwende VS 2019, ASP.NET MVC. Bei der folgenden Zeile hat sich nichts gerührt. Aufruf von der Controller Action-Methode von JavaScript aus:

    window.location.href = '@Url.Action("Action", "Controller")/'
    


  • @biter sagte in Aufruf von Funktionen ...:

    "Action", "Controller"

    Die Action und der Controller heißen bei Dir wirklich so?



  • Nein die heissen anders:

    window.location.href = '@Url.Action("CallButton", "Home")/'
    
    das ist nicht das Problem. Bei der entgegengesetzten Richtung habe ich gelesen, beim Controller:
    
    ```csharp
    return JavaScript("window.alert('Meldung');");
    

    da hat sich auch nichts getan ...



  • Dein controller kann kein js ausfuehren...wie auch.
    Was du tun kannst, ist eine (partial-)view zurueckgeben, die entsprechendes js beinhaltet. stichwort: javascript in razor



  • @Cardiac Ich habe das schon so verstanden daß das JavaScript im View, alson in der ausgelieferten Website ist. Oder verstehe ich da etwas grundsätzlich nicht?



  • @Swordfish doch, alles gut.
    die formulierungen von biter waren mir zu schlecht und schwammig, deshalb habe ich spezifischer geantwortet.

    edit:
    @biter sagte in Aufruf von Funktionen ...:

    return JavaScript("window.alert('Meldung');");
    

    das kann natuerlich nicht funktionieren, du musst window.foo in <script> tags wrappen.



  • Ja, da ging was mit dem Layout schief, die Tags wurden nicht richtig gesetzt. Bei Web-Forms kann man vom Code-Behind aus, JavaScript-Funktionen aufrufen, ( Page.ClientScript.RegisterStartupScript( ... );"), würde mich interessieren wie es bei MVC geht ...



  • @biter

    Würde es Dir nicht eher helfen, Dein JavaScript komplett im Frontend in einer entsprechenden Datei (bspw. "site.js") zu speichern, in dieser alle Funktionen reinzuknallen und im View zwei <script>-Tags zu haben, eines für den Import Deiner externen JS-File und das andere, um mithilfe von Razor dynamisch einen Funktionsaufruf zu rendern, abhängig von Deiner Action?

    Dann könntest Du im Controller via ViewData eine aufzurufende JavaScript-Funktion definieren, indem Du bspw. im Controller

    ViewData["CONDITIONAL_JS"] = "showHomepageGreeting();"; // oder was auch immer
    

    ergänzt und im View dann einfach

    <html>
    ...
    <body>
    ...
    <script src="/js/site.js"></script>
    <script>
    
    @if (ViewData["CONDITIONAL_JS"] != null) {
    @ViewData["CONDITIONAL_JS"]
    }
    
    </script>
    </body>
    </html>
    

    Hoffe, Deine Frage verstanden zu haben. Würde auch davon abraten, Haufen an JavaScript-Code im Backend zu schreiben und dann im Frontend zu rendern, macht alles unübersichtlicher.



  • Die Sache ist nicht so dringend, betrifft eher mein Wissensdurst. Mit JavaScript kann man die HTML-Seite dynamisch verändern. Wenn jetzt der Controller, im Modell feststellt, dass eine Bedingung zutrifft, und die Veränderung mit JavaScript durchführen will, müsste er in der Lage sein JavaScript-Funktionen aufzurufen ... Womöglich kann man das auch anders lösen, im Sinne von MVC , mit Razor ... Die Frage ist ganz allgemein, nichts konkretes ...



  • Wenn der Controller(!) eine veraenderung im Model(!) feststellt, hat das nix mit javascript zutun...



  • Bin da noch Anfänger. Wenn aufgrund der Veränderung im Modell, die View modifiziert werden muss, dann könnte man das mit Razor, "Für alle Fälle" abfangen. Oder die Modifizierung JavaScript überlassen ?



  • Damit meine ich folgendes, ein Beispiel mit Razor:

    <select>
    @foreach(var s in Model.Collection)
    {
    <option>@s</option>
    }
    </select>
    

    Oder mit JavaScript:

    "Container".appendChild("Eintrag")
    


  • @biter sagte in Aufruf von Funktionen ...:

    [...], im Sinne von MVC [...]

    Versuchen, Frontend im Backend zu schreiben, ist sicher nicht im Sinne von MVC.

    Selbst meinen Vorschlag als Kompromiss zu Deiner Fragestellung hätte ich nie durch einen Review bekommen.

    Wieso implementierst Du keine RESTful-API im Controller durch diverse sinnige Endpunkte und lässt Dein Frontend (und somit JavaScript) damit kommunizieren? Verstehe das nicht als Angriff, aber Du schießt Dir mit Deinem geplanten Vorhaben nur unnötig ins eigene Bein.

    Halte JavaScript vom Backend fern (außer Du nutzt JavaScript im Backend, bspw. bei Node.js - was hier nicht zutrifft). Ich würde nichtmal Razor nutzen, wobei dies meinungsabhängig ist.



  • @biter sagte in Aufruf von Funktionen ...:

    Damit meine ich folgendes, ein Beispiel mit Razor:

    <select>
    @foreach(var s in Model.Collection)
    {
    <option>@s</option>
    }
    </select>
    

    Oder mit JavaScript:

    "Container".appendChild("Eintrag")
    

    Und wo liegt (wenn das Dein konkreter Anwendungsfall ist) der Vorteil darin, Deine Options vom Select via JavaScript zu rendern, wenn Du ohnehin Razor benutzen möchtest/tust?



  • Dann lassen wir das, muss mich da noch einarbeiten, so schnell geht das nicht, Was ist Frontend ? und Backend ? Ich finde eben keine nützlichen Tutorials oder Bücher. Vielen Dank Euch !!!



  • @biter

    Die Tutorials von Microsoft sind gut. Bzgl. ASP.NET Core MVC kannst Du Dich hier einlesen. Ansonsten kann ich Dir bei Bedarf ein gutes C#-Buch empfehlen, welches jedoch deutlich mehr als ASP.NET abdeckt.

    Bzgl. Front- und Backend (gibt bestimmt bessere Definitionen):

    http://www.softselect.de/business-software-glossar/frontend (bei MVC das V)
    http://www.softselect.de/business-software-glossar/backend



  • Ja, an dem guten C# Buch, bin ich interessiert, zwar habe ich schon genügend Text, was die anderen Themen für C# ausser ASP.NET angeht. Für Web Forms habe ich schon Bücher, aber nicht für MVC und Core ! Meistens findet man keine Code-Beispiele bzw vollständige einfache Beispiel-Projekte. Fast immer nur Folgen von Projekt-Fenstern.



  • @biter

    Ich hatte die Auflage davor gelesen (inzwischen ist .NET 5 aktuell) und bin selbst inzwischen beruflich in Spring unterwegs, aber ich gehe davon aus, dass die neue Auflage auch gut ist.

    https://www.thalia.de/shop/home/artikeldetails/ID150312398.html

    Gibt es ggf. bei Amazon für weniger Geld.

    Das Buch deckt auch Themen wie testgetriebende Entwicklung (TDD) ab, wobei ich nicht weiß, inwiefern Du einsteigen möchtest.

    EDIT: Web Forms würde ich nicht nehmen, wenn man auch ASP.NET MVC nutzen kann.
    Siehe hier.


Log in to reply