2010-12-17 15 views
2

私はこの質問が非常に身近なものだと知っていますが、それ以上はできません。ASP.NET MVC2 JsonResultこのリクエストはブロックされています

は、これは私のコントローラのアクション

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

であると私は、この要求がブロックされてい

ポップアップ表示エラー知らAJAXリクエストを実行すると、これは私のAJAXリクエスト

$.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; 
    } 
}); 

です 機密情報は となりますので、第三者ウェブsiこれがGETリクエストで使用される場合は となります。 にGET要求を許可するには、 JsonRequestBehaviorをAllowGetに設定します。

私はAddToCartアクション[HttpPost]が許容するだけで、現時点で作ることにしようとしました:(500 int型SERVエラー)のパラメータがメソッドに到着したことがないし、不足している引数のエラーが要求から返さ

私はでのみ実行することができますメソッドを取得するが、リクエストはこの時点でブロックされています:)

私に何か不足していますか?または、MVC2 Ajaxリクエストの正しい方法は何ですか。 WebFormsはJavaScriptからメソッドを呼び出すことに成功しましたが、MVCでそのメソッドを実行できませんでした。

答えて

1

このシグネチャを使用してPOSTを試しましたか?

[HttpPost] 
public ActionResult AddToCart(FormCollection form) 

または、データバインディングを使用して:

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

​​

残念ながら、私は良い答えを持っていないが、私はこの私自身の問題のいくつかを解決してきました(経路を使ってパラメータを適切に渡す方法を理解するのではなく)。

+0

ああ私の神は働いています。この種の要求のための方法。非常に@mootinatorと他の参加者ありがとう:) – Orhaan

1

これがあなたの根本的な問題であることは確かではありませんが、content-typeをtext/htmlに設定しないでください。それはあなたが送っているものでも、MVCが期待しているものでもありません。そのパラメータを省略し、jQueryに適切なapplication/x-www-form-urlencodedに設定させます。

+0

あなたは正しいですが、それはちょうど試していました。私のコードの最初のバージョンは "application/json"コンテンツタイプですが、何も違いはありません。 – Orhaan

+0

application/jsonも正しくありません。そのデータパラメータはJSONとしてサーバーに送信されません。 content-typeを省略してみてください。 jQueryは通常のURLエンコードされたリクエストに対して自動的にそれを設定します。 –

+0

実際には 'contentType'を完全に省略してjQueryに設定させることができます。 –

関連する問題