2009-01-05 9 views
6

Ich bin total verwirrt, wie man ajax stuffs mit jQuery und es scheint, je mehr ich versuche, desto mehr verwirrt bekomme ich. An diesem Punkt möchte ich nur Daten mit jQuery ajax an meinen Controller senden. Irgendein Code für meinen jquery Ajax Anruf ist.ASP.NET MVC und JQuery Informationen zum Controller

$(function() { 
    $('#buttonAddLink').click(function() { 
     var AjaxLink = { 
      title: $("#linkTitle").val(), 
      url: $("#linkUrl").val() 
     }; 

     $.ajax({ 
      url: '/User/AddLink', 
      type: 'POST', 
      data: AjaxLink, 
      dataType: 'json', 
      success: function(result){ 
       $('.added').html(result.Result).show(); 
      } 
     });   
    });  
}); 

Hier ist meine Steuerung und Aktion, die ich verwende. Von dem Versuch, mehrere Tutorials zu betrachten, sollte es nach meinem besten Wissen funktionieren, aber anscheinend verstehe ich es nicht so, wie ich es dachte.

public ActionResult AddLink(string title, string url) 
{ 
    return Json(new { Result = string.Format(title + " " + url)}); 
} 

Alles, was ich im Grunde damit zu tun versuche, ist der Anruf Ajax tun und senden es nur angezeigt werden, dass Daten machen wurde an den Controller gesendet.

Antwort

3

Es hat damit zu tun, wie Sie Ihre Anfrage strukturieren. Ihr JQuery-Aufruf sendet die Daten als POST-Daten an die Add-Link-Aktion auf dem Benutzer-Controller, was bedeutet, dass Sie in Ihrem C# -Code über das Request.Form-Objekt darauf zugreifen. Mit dem, was Sie zu tun versuchen, würden Sie die jQuery-URL-Struktur als

/User/AddLink/{Title}/{URL} 

Dies müssten Sie eine Regel in der Datei Global.asax zu schreiben, die diese Art von Eingabe behandelt. Kurz gesagt, wenn Sie nur Ihre AddLink Methode wie folgt ändern:

public ActionResult AddLink() 
{ 
    return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])}); 
} 

Ich glaube, Sie die Antwort bekommen, die Sie suchen.

+0

Sie * können * mit Request.Form darauf zugreifen, jedoch wird das ASP.NET MVC-Framework auch die Formularwerte parametrisieren, wenn es möglich ist (obwohl es ein wenig verwirrt wird, wenn der gleiche Wert in den URL-Parametern und -Formular angezeigt wird) . –

1

Haben Sie versucht, die vollständige URL zu schreiben? Ich hatte ein Projekt auf meinem lokalen IIS, das das gleiche Problem hatte. Die vollständige URL war http://localhost/myproject/user/addlink, aber die Verwendung von "/ user/addlink" in der jQuery Ajax-Aufruf wurde an http://localhost/user/addlink (beachten Sie, dass "myproject" fehlt, weil es nicht wirklich die Basis-URL ist soweit jQuery weiß).

0

haben Sie versucht, die jQuery.post Methode so etwas wie

jQuery.post("/User/AddLink",AjaxLink,function(data,textStatus) 
{ 
    if(textStatus=="success") 
    { 
    //do something with data which is the result from the call} 
    } 
    else 
    { 
    //failed somewhere along the line 
    } 
},"json"); 

Post Werte Parameter in der MVC-Aufruf abgebildet sein sollte sollte so foxxtrot Code unnötig.

+0

haben Sie einen Firebug verwendet, um zu prüfen, welche Daten gesendet werden? Wird die Aktion aufgerufen (was sich auf ein Routing-Problem beziehen würde)? – buildmaster

1

Verwenden Sie ein Tool wie Firebug, um sicherzustellen, dass die URL, die Sie erwarten, aufgerufen wird.

Debug-Routine =>

  1. Verwenden Firbug, um festzustellen, dass die richtige URL aufgerufen wird und die richtigen Daten in der Post gesendet werden
  2. den Anruf in der Aktion durchbrechen und sicherstellen, dass die Parameter korrekt eingesetzt
  3. Verwendung Firebug wird wieder die Antwort kann

IE developer Toolbar auch anstelle von Firebug verwendet werden, um zu überprüfen, ob Sie IE bevorzugen. Wenn die Aufruf-URL und die Post-Daten korrekt angezeigt werden und die Aktion nicht aufgerufen wird, sollten Sie Ihre Routing-Regeln überprüfen. dh hat es irgendwelche Standardwerte, in welchem ​​Fall das MVC-Framework nach einer Methodensignatur sucht, die diese Standardwerte enthält (haben Sie {id} in Ihrer URL-Regel?)

0

Ich habe noch nicht die Zeit genommen, es zu testen, aber es sieht so aus, als ob es funktionieren sollte, die eine denke, ich würde sicherstellen, dass Sie die Controllerfunktion dekorieren, um es wissen zu lassen, dass es nach einem Beitrag wie dem sucht folgende:

Ich sollte Zeit haben, es heute Nachmittag zu testen, wenn keine dieser Lösungen für Sie arbeiten.

2

Ok, versuchen Sie diesen Code mit Ajax Daten zu Ihrer Aktion Methode zu übergeben:

jQuery.ajax({ 
      url: '@Url.Action("AddLink", "User")', 
      type: 'POST', 
      contentType: 'application/json', 
      data: JSON.stringify({ title: title, url: url }), 
      success: function (result) { } 
     }); 
+0

Sie einfach nur das gleiche Code-Snippet als Antwort auf jede Frage zu finden, die Sie finden können. Es ist eigentlich nicht hilfreich hier. -1 –

0

So war ich ein wenig von einer Zeit, die versuchen, herauszufinden, wie man Daten von einem AJAX-Aufruf zu kommen. Ich übergab ein JSON-Objekt von der Ansicht an den Controller und dann die ID des Objekts, wenn es fertig ist.

So habe ich endlich, dass die Arbeit, und hier ist, was ich auf der Ansicht tat

var obj = { 
    property1 : '', 
    property2 : '' 
}; 

$.ajax({ 
    // Returns the full url 
    url: '@Url.Action("Method", "Controller")', 
    // Sends as a json object, I actually have an object that maps to my ViewModel, this is just for explaining 
    data: obj, 
    // You are telling that you are receiving a json object 
    dataType: 'json', 
    success: function (id) { 
     // do code here with id 
    } 
}) 

Für meine Controller, kehrte ich ein Json-Objekt und hat einen AllowGet als JsonRequestBehavior

public ActionResult Method (ViewModel vm) 
{ 
    int id = ... (do something with the vm) 
    return Json(id, JsonRequestBehavior.AllowGet); 
} 

Bearbeiten: Darüber hinaus scheint es, Sie haben POST als die Art der Anfrage an den Controller, und Ihre Controller-Methode hat nicht die [HttpPost] Annotation. Das könnte auch der Fall sein.

Ich hoffe, das hilft!
Prost!