2009-05-11 36 views
3

コントローラにjQuery GETリクエストを処理するのに問題はありませんが、POSTにフォームデータを取得できません。クライアントスニペットコントローラと組み合わせるjQuery POSTとASP.NET MVCを使用するとコントローラパラメータがNULLになる

$.post(url,{name:"John"},function(result){ 
    //process result 
}); 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Save(string name) 
{ 
    return Json("Success!"); 
} 

Iは、メソッドパラメータにマップする名前を期待に対し、アクションメソッドの内部で検査するとき名パラメータにNULL値をもたらすであろう。また、このコンテキストの他のすべてのオブジェクト(Request.Form)などはNULLのようです。私は$.getでこれを行うことができますが、私はPOSTで副作用のある操作を行うことになっていると思います。 ASP.NET MVC 1.0、jQuery 1.2.6、Internet Explorer 7を使用しています。

ありがとう!

更新:私の下の答えと謙虚な謝罪

答えて

6

申し訳ありませんよね、私は、デフォルトのcontentTypeをapplication/jsonにオーバーライドしたページに$ .ajaxSetupエントリを持っていました。

次のようにデフォルトのcontentTypeを使用して:「名前=ジョン」:PROCESSDATAは文字列に(データを解析されますJSONオブジェクトとデータ入力を意味し、デフォルトでtrueであるため、それが動作

$.ajax({ url, 
     type: "POST", 
     contentType: "application/x-www-form-urlencoded", 
     success: function(result) { alert(result); }, 
     data: { name: "John" } 
     }); 

また動作します)。

ご迷惑をおかけして申し訳ありません:JSONオブジェクトを渡すことについての提案をマークしていただきありがとうございます。

+1

修正を送信していただきありがとうございます。 –

+1

これで1時間を費やしました。あなた自身の質問に感謝してくれてありがとう。 ;) – Gleno

1

を参照してください、それは保存(文字列名)メソッドは文字列化されたJSONを期待していることだろうか?これを試してください:

$.post(url, 
"{'name':'John'}", function(result){ 
}); 
+0

残念ながら、これは動作しません - ありがとう! –

1

jsonオブジェクトを作成してアクションで投げるほど簡単ではありません。

hereから始まります。人々は小さなスクリプトを書いて、JSONオブジェクトを身に着け、それを読み込んでプロパティや引数にマップするアクションを準備します。

+0

私はこれを読むでしょう。リンクは複雑なカスタムタイプをパラメータとして期待するアクションメソッドにJSONを渡す方法を説明していますが、私は次にこれをやりたいと思いますが、今のところ単純に文字列を渡そうとしています。 –

+1

ええ、それは本当です。 JSONオブジェクトを渡すことについての素晴らしい点は、デシリアライズして検証するクールなアクションフィルタを記述できることです。 MVCを持つAJAXにとってはとても良いことです。あなたのご意見に感謝します。 –

2

あなたのコードはうまくいくと思いますが、あなたのURLは正しいですか、ルート設定は正しくなっていますか?また、サーバへのリクエストが何であるかを正確に確認し、正しい項目を渡している場合は、常にFiddlerを起動することができます。

+0

ありがとう!フィドラーを試してみてください。 IveはInternet ExplorerでWeb Development Helperを使用していましたが、適切なリクエストボディをメソッドに渡しているようです。 –

関連する問題