2

質問が非常によく知られていることは知っていますが、それを乗り越えることはできません。

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

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({
    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;
    }
});

ajax リクエストを実行すると、既知のエラーが表示される

このリクエストは、GET リクエストで使用すると機密情報がサード パーティの Web サイトに開示される可能性があるため、ブロックされました。GET リクエストを許可するには、JsonRequestBehavior を AllowGet に設定します。

AddToCart アクション [HttpPost] を受け入れられるようにしようとしましたが、現時点では: パラメータがメソッドに到達せず、リクエストから引数が見つからないというエラーが返されました (500 int. serv エラー)

get メソッドでのみ実行できますが、現時点ではリクエストがブロックされています :)

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

何か案が?

4

2 に答える 2

1

これがあなたの根本的な問題かどうかはわかりませんが、コンテンツ タイプを text/html に設定しないでください。それはあなたが送っているものでも、MVC が期待しているものでもありません。そのパラメーターを完全に省略し、jQuery にapplication/x-www-form-urlencoded適切な に設定させます。

于 2010-12-17T02:05:10.870 に答える
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;}
}

それで:

 public ActionResult AddToCart(CartItem c)

残念ながら、良い答えはありませんが、ルートを使用してパラメーターを適切に渡す方法を理解するのではなく、この方法で自分の問題のいくつかを解決しました。

于 2010-12-17T02:26:09.800 に答える