2011-02-14 23 views
12

これは簡単な質問かもしれませんが、今私にとっては明らかではないし、私の頭の中でソートされたものを得なければならないかもしれません。 ..ASP.NET MVC 3のためのjquery ajaxフォーム

MVCにはAjaxヘルパーが付属しています。 私はMicrosoftライブラリがあり、jqueryもあることを知っています。 MVC 3では、クリーン用のhtmlにいくつかの特別なタグを追加する控えめなjavascriptを紹介しています...

どうやって一緒に遊んでいますか?

例:ブログ記事にコメントを追加するために、ajaxごとにリモートフォーム(部分表示)を投稿したいとします。ページ全体をポストすることなく。

私の部分的なビューで使用しますAjax.BeginForm()これはMvcAjaxまたはJqueryですか? またはHtml.BeginForm()を使用し、フォームのクリックイベントに$ .postのようなものを登録しますか?これは、javascriptが無効になっている、またはサポートされていない場合のプレーンhtmlのフォールバックも持っています....

一般に、ブログポストにコメントを投稿するために何を使用するのですか... ...そして、私がcommentscontrollerのアクションを作成することに投稿しているので、JsonModelBinderを使ってそれをモデルに変換します。その後、私はJsonに戻り、私のコメントリストに追加します。

これはなぜそうするのが合理的ですか?

答えて

30

Ajax.BeginForm()はMvcAjaxまたはJqueryですか?

デフォルトではjqueryです。これを行うにはjquery.unobtrusive-ajax.jsスクリプトを参照する必要があります。

または、私はHtml.BeginForm()を使用し、フォームのクリックイベントに$ .postのようなものを登録しますか?

これは代替方法です。個人的には私がしていることです。

私はcommentscontrollerの作成アクションに投稿しており、JsonModelBinderを使用してモデルに変換するとします。その後、私はJSONを返すと私のコメントリストに追加します...

JsonModelBinderは、ASP.NET MVC 3で導入されており、それは次のようになりますコントローラのアクションにJSON文字列を送信することができますビューモデルに再びマップされます。

public class PersonViewModel 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

と、次のアクション:次のビューモデルがある場合たとえば

public ActionResult Foo(PersonViewModel person) 
{ 
    ...  
} 

をAJAXでそれを呼び出すための伝統的な方法は次のとおりです。

$.ajax({ 
    url: '@Url.Action("foo")', 
    type: 'POST', 
    data: { name: 'john', age: 20 }, 
    success: function(result) { 
     // TODO: 
    } 
}); 

とASPインチNET MVC 3あなたはPersonViewModelアクションパラメータにバインドされるリクエストパラメータとしてJSONを送ることができます:

$.ajax({ 
    url: '@Url.Action("foo")', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({ name: 'john', age: 20 }), 
    success: function(result) { 
     // TODO: 
    } 
}); 
+2

は 'JSON.stringify'は私が必要... THXを一部でした! – Trev

+0

送信イベントをキャプチャしてフォームから取得したデータでMVCに転記している場合など。ダーリンの例のコンテンツタイプは、それが機能するために削除する必要があります($# "some_form")。そのシナリオでは –

+0

興味深い!私はJsonModelBinderを見てみる – Rushino

関連する問題