0

こんにちは、ajax 呼び出しからクエリ文字列を取得しようとしていますが、うまく機能していないようです。コードは次のとおりです。

@Ajax.ActionLink("Add To Cart" ,
                             "AddToCart" ,
                             "Products", 
                             new {
                                    ProductId = @products.ElementAt(0).Value
                                 },
                             new AjaxOptions{
                                               Url = "/Products/AddToCart",
                                               InsertionMode = InsertionMode.Replace,
                                               UpdateTargetId = "UpdateCart",
                                               HttpMethod = "GET"
                                            })

アプリケーションにある各リンクは、次のように呼び出します。

Products/AddToCart?ProductId=5

これが呼び出すコントローラーです。

public ActionResult AddToCart(string ProductId)
    {
            string ProductCeva = ProductId;
    }

MVC3 についてこれまでに学んだことから、私たちの場合、パラメーター ProductId は 5 になると想定しましたが、コードをデバッグすると、null であることがわかります。

ここで何が間違っていますか? このケースで ProductId クエリ文字列を取得するにはどうすればよいですか?

4

1 に答える 1

4

Url = "/Products/AddToCart",からビットを取り外しますAjaxOptions

なんで?

理由は次のとおりです。次のコード:

@Ajax.ActionLink(
    "Add To Cart" ,
    "AddToCart" ,
    "Products", 
    new {
        ProductId = @products.ElementAt(0).Value
    },
    new AjaxOptions {
        Url = "/Products/AddToCart",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "UpdateCart",
        HttpMethod = "GET"
    }
)

生成:

<a data-ajax="true" data-ajax-method="GET" data-ajax-mode="replace" data-ajax-update="#UpdateCart" data-ajax-url="/Products/AddToCart" href="/Products/AddToCart?ProductId=5">Add To Cart</a>

href生成されたアンカーの が正しい場合でも( /Products/AddToCart?ProductId=5)、それは AJAX 要求に使用されるものではありません。あなたjquery.unobtrusive-ajax.jsが使用していて、控えめにすべてのアンカーをdata-ajax-urlAJAX 化する は、属性の代わりに AJAX 要求を送信するときに属性 (存在する場合) を使用しhrefます。属性の値を見るとdata-ajax-url、コントローラ アクションで null を取得する理由がわかります。

また、FireBug または同様の JavaScript デバッグ ツールを使用していた場合にも、これが表示されます。なぜなら、[ネットワーク] タブを調べて、AJAX 要求が機能しない理由を調べたときに、間違った URL が使用されていることがわかったからです。

この質問から覚えておくべき 2 つのことを簡単に説明します (最初の質問は、2 番目の質問を推測できるため、より重要です)。

  1. FireBug を使用する
  2. UrlプロパティをAjaxOptions使用すると、AJAX リクエストの送信時に使用される URL をオーバーライドできます。
于 2012-12-28T14:52:45.090 に答える