2010-12-17 7 views
2

Ich weiß, die Frage ist sehr vertraut, aber ich kann nicht darüber hinweg.ASP.NET MVC2 JsonResult Diese Anfrage wurde blockiert

Das ist mein Controller Aktion

public JsonResult AddToCart(int productId, int quantity = 1, int optionValue = 0) 
{ 
    AjaxActionResponse res = new AjaxActionResponse(); 
    res.Result = ture; 
    ...... 
    return Json(res, JsonRequestBehavior.AllowGet); 
} 

und dies ist mein Ajax-Request

$.ajax({ 
    type: "GET", 
    contentType: "application/json; charset=utf-8", 
    url: "<%= Url.Action("AddToCart", "CartAjax") %>", 
    data: ({'productId': productId, 'quantity': quantity, 'optionValue': optionValue}), 
    dataType: "json", 
    success: function (d) { 
     if ($.isEmptyObject(d)) { 
      return; 
     } 
     if (!d.Result) { 
      alert(d.ErrorMessage[0].ErrorMessage); 
     } 
     else { 
      $("#myCartBox").dialog("open"); 
     } 
     return; 
    } 
}); 

wenn ich die Ajax-Request bekannten Fehler ausgeführt erscheint

Dieser Antrag wurde blockiert weil sensible Informationen könnte an Dritte Web-Website veröffentlicht werden tes wenn dies in einer GET-Anfrage verwendet wird. Um GET-Anfragen zuzulassen, setzen Sie JsonRequestBehavior auf AllowGet.

Ich habe versucht zu machen AddToCart Aktion [Httppost] akzeptabel, aber zu diesem Zeitpunkt: Parameter kamen nie an das Verfahren und die fehlende Argument Fehler aus der Anforderung zurückgegeben (500 int serv Fehler.)

ich laufen kann nur mit Methode erhalten, aber Anfrage wurde zu diesem Zeitpunkt blockiert :)

Fehle ich etwas? Oder was ist der richtige Weg für MVC2 Ajax Anfrage. WebForms war sehr erfolgreich beim Aufrufen von Methoden aus JavaScript, aber ich konnte dies nicht auf MVC tun.

Irgendeine Idee?

Antwort

1

Haben Sie versucht, POST mit dieser Methodensignatur zu verwenden?

[HttpPost] 
public ActionResult AddToCart(FormCollection form) 

Oder mit Datenbindung:

public class CartItem { 
    public int productId {get; set;} 
    public int quantity {get; set;} 
    public int optionValue {get; set;} 
} 

Dann:

public ActionResult AddToCart(CartItem c) 

Leider habe ich keine gute Antwort, aber ich habe einige meiner eigenen Probleme gelöst diesem Weg (anstatt herauszufinden, wie man die Parameter mit Hilfe von Routen geschickt bekommt).

+0

Oh mein Gott, es funktioniert :) Ich denke, Model Bindung ist das Richtige Weg für diese Art Anfragen.Vielen Dank @mootinator und anderen Teilnehmern :) – Orhaan

1

Ich weiß nicht sicher, dass dies Ihr grundsätzliches Problem ist, aber Sie sollten den Inhaltstyp nicht auf text/html setzen. Das ist nicht das, was Sie senden oder was MVC erwartet. Schließen Sie diesen Parameter vollständig aus und lassen Sie ihn von jQuery auf application/x-www-form-urlencoded setzen, was angemessen ist.

+0

Umm ja du hast recht, aber es hat nur versucht. Die erste Version meines Codes hat den Inhaltstyp "application/json", aber nichts unterschied sich. – Orhaan

+0

Anwendung/Json wäre auch falsch. Dieser Datenparameter wird nicht als JSON an den Server gesendet. Versuchen Sie, den Inhaltstyp wegzulassen; jQuery stellt es automatisch für normale urlencodierte Anfragen ein. –

+0

tatsächlich können Sie den 'contentType' komplett weglassen und ihn von jQuery setzen lassen. –