it-swarm.com.de

Einen einfachen Ajax-Aufruf an den Controller in asp.net mvc senden

Ich versuche, mit ASP.NET MVC Ajax-Aufrufen zu beginnen.

Controller:

public class AjaxTestController : Controller
{
    //
    // GET: /AjaxTest/
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   
}

Ansicht:

<head runat="server">
    <title>FirstAjax</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var serviceURL = '/AjaxTest/FirstAjax';

            $.ajax({
                type: "POST",
                url: serviceURL,
                data: param = "",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: successFunc,
                error: errorFunc
            });

            function successFunc(data, status) {     
                alert(data);
            }

            function errorFunc() {
                alert('error');
            }
        });
    </script>
</head>

Ich muss nur eine Warnung mit der Controller-Methode ausdrucken, die Daten zurückgibt. Über Code drucken Sie einfach "Chamara" auf meiner Ansicht. Ein Alarm wird nicht ausgelöst.

UPDATE

Ich habe meinen Controller wie folgt geändert und er funktioniert nun. Ich habe keine klare Vorstellung, warum es jetzt funktioniert. Jemand bitte erklären. Der Parameter "a" hat nichts damit zu tun. Ich habe ihn hinzugefügt, weil ich nicht zwei Methoden mit demselben Methodennamen und denselben Parametern hinzufügen kann. Ich denke, dies ist möglicherweise nicht die Lösung, aber es funktioniert

public class AjaxTestController : Controller
    {
        //
        // GET: /AjaxTest/
        [HttpGet]
        public ActionResult FirstAjax()
        {
            return View();
        }

        [HttpPost]
        public ActionResult FirstAjax(string a)
        {
            return Json("chamara", JsonRequestBehavior.AllowGet);
        }
    }
103
chamara

Nach dem Update haben Sie getan,

  1. beim ersten Aufruf der FirstAjax-Aktion mit der Standardanforderung HttpGet wird die leere HTML-Ansicht gerendert. (Früher hatten Sie es nicht)
  2. wenn Sie später DOM-Elemente dieser Ansicht laden, wird Ihr Ajax-Anruf ausgelöst und eine Warnmeldung angezeigt.

Früher haben Sie JSON nur an den Browser zurückgegeben, ohne HTML-Code zu rendern. Jetzt wird eine HTML-Ansicht gerendert, in der Ihre JSON-Daten abgerufen werden können.

Sie können JSON seine einfachen Daten nicht direkt als HTML rendern.

22
asb

Entfernen Sie das Datenattribut, da Sie dem Server nichts POSTING mitteilen (Ihr Controller erwartet keine Parameter).

Und in Ihrer AJAX Methode können Sie Razor verwenden und @Url.Action statt einer statischen Zeichenfolge:

$.ajax({
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: successFunc,
    error: errorFunc
});

Von Ihrem Update:

$.ajax({
    type: "POST",
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    data: { a: "testing" },
    dataType: "json",
    success: function() { alert('Success'); },
    error: errorFunc
});
49
Darren

Verwenden Sie einen Rasierer, um Ihre URL dynamisch zu ändern, indem Sie Ihre Aktion folgendermaßen aufrufen:

$.ajax({
    type: "POST",
    url: '@Url.Action("ActionName", "ControllerName")',
    contentType: "application/json; charset=utf-8",
    data: { data: "yourdata" },
    dataType: "json",
    success: function(recData) { alert('Success'); },
    error: function() { alert('A error'); }
});
12
gdmanandamohon

Es ist für Ihre UPDATE-Frage.

Da Sie nicht über zwei Methoden mit demselben Namen und derselben Signatur verfügen können, müssen Sie das ActionName-Attribut verwenden:

AKTUALISIEREN:

[HttpGet]
public ActionResult FirstAjax()
{
    Some Code--Some Code---Some Code
    return View();
}

[HttpPost]
[ActionName("FirstAjax")]
public ActionResult FirstAjaxPost()
{
    Some Code--Some Code---Some Code
    return View();
}

Und bitte lesen Sie this link, um weitere Informationen darüber zu erhalten, wie eine Methode zu einer Aktion wird. Sehr gute Referenz.

4
RGR

Als erstes ist es nicht erforderlich, zwei verschiedene Versionen von jquery-Bibliotheken auf einer Seite zu haben. Entweder "1.9.1" oder "2.0.0" reichen aus, um Ajax-Aufrufe zum Laufen zu bringen.

Hier ist Ihr Controller-Code:

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

    public ActionResult FirstAjax(string a)
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   

So sollte Ihre Ansicht aussehen:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function () {
    var a = "Test";
    $.ajax({
        url: "../../Home/FirstAjax",
        type: "GET",
        data: { a : a },
        success: function (response) {
            alert(response);
        },
        error: function (response) {
            alert(response);
        }
    });
});
</script>
4
Lokesh_Ram

Wenn Sie in Ihrem Ajax-Aufruf nur die C # -Methode aktivieren müssen, müssen Sie nur zwei Materietypen und eine URL übergeben, wenn Ihre Anfrage eingeht, müssen Sie nur die URL angeben. Bitte folgen Sie dem unten stehenden Code.

C # -Code:

    [HttpGet]
    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   

Java Script Code wenn Get Request

    $.ajax({
        url: 'home/FirstAjax',
        success: function(responce){ alert(responce.data)},
        error: function(responce){ alert(responce.data)}
    });

Java Script Code wenn Post Request und auch [HttpGet] to [HttpPost]

        $.ajax({
            url: 'home/FirstAjax',
            type:'POST',
            success: function(responce){ alert(responce)},
            error: function(responce){ alert(responce)}
        });

Hinweis: Wenn Sie FirstAjax in demselben Controller verwenden, in dem sich Ihr View Controller befindet, müssen Sie in der URL keinen Controllernamen eingeben. mögen url: 'FirstAjax',

3
Hafiz Asad

Aussicht;

 $.ajax({
        type: 'GET',
        cache: false,
        url: '/Login/Method',
        dataType: 'json',
        data: {  },
        error: function () {
        },
        success: function (result) {
            alert("success")
        }
    });

Controller-Methode;

 public JsonResult Method()
 {
   return Json(new JsonResult()
      {
         Data = "Result"
      }, JsonRequestBehavior.AllowGet);
 }
1
oyenigun

Fügen Sie "JsonValueProviderFactory" in global.asax hinzu:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
0
Yashh

anstatt url: serviceURL, verwenden

url: '<%= serviceURL%>',

und übergeben Sie 2 Parameter an successFunc?

function successFunc(data)
 {
   alert(data);
 }
0
swapneel