wake-up-neo.com

So rufen Sie Controller-Aktionen mit JQuery in ASP.NET MVC auf

Ich habe dies eine Weile gelesen und festgestellt, dass Sie eine Controller-Aktion aufrufen können, indem Sie Folgendes verwenden:

$.ajax("MyController/MyAction", function(data) {
    alert(data);
});

Bedeutet das, dass ich die MicrosoftMvcAjax.js oder die MicrosoftAjax.js zusammen mit der Jquery-Bibliothek hinzufügen sollte?

Was sollte auch der zweite Parameter in der $ .ajax () - Funktion enthalten?

Schließlich noch ein anderer Link in stackoverflow oder außerhalb der Site, der in asp.net mvc w/ajax und jquery hilfreich sein könnte?

Vielen Dank.

22
Erick Garcia

Sie können von hier aus lesen jQuery.ajax ()

Tatsächlich ist Controller Action eine öffentliche Methode, auf die über URL zugegriffen werden kann. Daher kann jeder Aufruf einer Action aus einem Ajax-Aufruf, MicrosoftMvcAjax oder jQuery, erfolgen. Für mich ist jQuery das einfachste. Der Link, den ich oben angegeben habe, hat viele Beispiele. Das typische Beispiel für einen Ajax-Aufruf ist so.

$.ajax({
    // edit to add steve's suggestion.
    //url: "/ControllerName/ActionName",
    url: '<%= Url.Action("ActionName", "ControllerName") %>',
    success: function(data) {
         // your data could be a View or Json or what ever you returned in your action method 
         // parse your data here
         alert(data);
    }
});

Weitere Beispiele finden Sie in hier

40
rob waminal

die vorherige Antwort ist nur ASP.NET 

sie benötigen einen Verweis auf jquery (möglicherweise von einem CDN): http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js

und dann ein ähnlicher Codeblock, aber einfacher ... 

$.ajax({ url: '/Controller/Action/Id',
         success: function(data) { alert(data); }, 
         statusCode : {
             404: function(content) { alert('cannot find resource'); },
             500: function(content) { alert('internal server error'); }
         }, 
         error: function(req, status, errorObj) {
               // handle status === "timeout"
               // handle other errors
         }
});

Ich habe ein paar notwendige Handler hinzugefügt, 404 und 500 passieren ständig, wenn Sie Code debuggen. Außerdem werden viele andere Fehler, z. B. das Zeitlimit, durch den Fehlerhandler herausgefiltert.

ASP.NET-MVC-Controller verarbeiten Anforderungen, sodass Sie nur die richtige URL anfordern müssen, die vom Controller abgerufen wird. Dieses Codebeispiel funktioniert in anderen Umgebungen als ASP.NET

30
Glenn Ferrie

Wir können die Controller-Methode mit Javascript/Jquery sehr einfach wie folgt aufrufen: 

Nehmen wir an, die folgende Controller-Methode muss aufgerufen werden, um ein Array einiger Klassenobjekte zurückzugeben. Lass die Klasse 'A' sein

public JsonResult SubMenu_Click(string param1, string param2)

    {
       A[] arr = null;
        try
        {
            Processing...
           Get Result and fill arr.

        }
        catch { }


        return Json(arr , JsonRequestBehavior.AllowGet);

    }

Folgendes ist der komplexe Typ (Klasse)

 public class A
 {

  public string property1 {get ; set ;}

  public string property2 {get ; set ;}

 }

Nun war es an der Reihe, die Controller-Methode von JQUERY aufzurufen. Im Folgenden ist die Jquery-Funktion zum Aufrufen der Controller-Methode aufgeführt.

function callControllerMethod(value1 , value2) {
    var strMethodUrl = '@Url.Action("SubMenu_Click", "Home")?param1=value1 &param2=value2'
    $.getJSON(strMethodUrl, receieveResponse);
}


function receieveResponse(response) {

    if (response != null) {
        for (var i = 0; i < response.length; i++) {
           alert(response[i].property1);
        }
    }
}

In der obigen Jquery-Funktion 'callControllerMethod' entwickeln wir die Controller-Methoden-URL und fügen diese in eine Variable mit dem Namen 'strMehodUrl' ein und rufen die getJSON-Methode der Jquery-API auf.

receieveResponse ist die Rückruffunktion, die den Antwort- oder Rückgabewert der Controller-Methode empfängt. 

Hier haben wir JSON verwendet, da wir das C # -Klassenobjekt nicht verwenden können

direkt in die Javascript-Funktion, also konvertierten wir das Ergebnis (arr) in der Controller-Methode wie folgt in ein JSON-Objekt:

Json(arr , JsonRequestBehavior.AllowGet);

und gab dieses Json-Objekt zurück.

In der Rückruffunktion von Javascript/JQuery können wir dieses resultierende JSON-Objekt verwenden und entsprechend arbeiten, um Antwortdaten auf der Benutzeroberfläche anzuzeigen.

Für mehr Detail hier klicken

1

Sie können mit der Methode jQuery AJAX wie folgt jede Controller-Aktion aufrufen:

Beachten Sie in diesem Beispiel, dass mein Controller-Name Student ist.

Controller-Aktion

 public ActionResult Test()
 {
     return View();
 }

In Any View von diesem Controller können Sie die Aktion Test () wie folgt aufrufen:

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
    $(document).ready(function () {
        $.ajax({
            url: "@Url.Action("Test", "Student")",
            success: function (result, status, xhr) {
                alert("Result: " + status + " " + xhr.status + " " + xhr.statusText)
            },
            error: function (xhr, status, error) {
                alert("Result: " + status + " " + error + " " + xhr.status + " " + xhr.statusText)
            }
        });
    });
</script>
1
yogihosting

Als Antwort auf den obigen Beitrag denke ich, dass diese Zeile anstelle Ihrer Zeile benötigt wird: - 

var strMethodUrl = '@Url.Action("SubMenu_Click", "Logging")?param1='+value1+' &param2='+value2

Oder Sie senden die aktuellen Zeichenfolgen value1 und value2 an die Steuerung.

Bei mir wird der Controller jedoch nur einmal aufgerufen. Es scheint, jedes Mal auf 'receieveResponse' zu klicken, aber ein Haltepunkt in der Controller-Methode zeigt, dass er nur das erste Mal getroffen wird, bis eine Seite aktualisiert wird.


Hier ist eine funktionierende Lösung. Für die cshtml-Seite: -

   <button type="button" onclick="ButtonClick();"> Call &raquo;</button>

<script>
    function ButtonClick()
    {
        callControllerMethod2("1", "2");
    }
    function callControllerMethod2(value1, value2)
    {
        var response = null;
        $.ajax({
            async: true,
            url: "Logging/SubMenu_Click?param1=" + value1 + " &param2=" + value2,
            cache: false,
            dataType: "json",
            success: function (data) { receiveResponse(data); }
        });
    }
    function receiveResponse(response)
    {
        if (response != null)
        {
            for (var i = 0; i < response.length; i++)
            {
                alert(response[i].Data);
            }
        }
    }
</script>

Und für den Controller: -

public class A
{
    public string Id { get; set; }
    public string Data { get; set; }

}
public JsonResult SubMenu_Click(string param1, string param2)
{
    A[] arr = new A[] {new A(){ Id = "1", Data = DateTime.Now.Millisecond.ToString() } };
    return Json(arr , JsonRequestBehavior.AllowGet);
}

Sie können die Uhrzeit bei jedem Aufruf ändern, sodass die Werte nicht zwischengespeichert werden.

1
user2284063