2011-07-20 21 views
5

jQuery ajaxを使用して文字列をコントローラアクションに渡すだけでも簡単ですが、変数グループをオブジェクトにシリアル化してコントローラに送信し、コントローラがそれをオブジェクトとして認識させることは可能ですか?"C#"オブジェクトをAJAX経由でコントローラに渡す方法はありますか?

例えば:

class Obj{ 
    string a; int b; double c; 
} 

をし、コントローラには、あなたがたobjオブジェクト

public JsonResult UpdateObj(Obj obj){ 
    //stuff 
} 
を期待されているメソッドを持っています。サーバーで

、次のようなクラスのObjを持っています

いくつかのJavaScript変数をObjクラスにシリアル化し、AJAXポストを介してMVCコントローラアクションに送る方法がありますか?

+1

これは既にMVC 3に組み込まれています.JSONリクエストはObjのプロパティと一致する必要があり、モデルバインダーは値をバインドします。 – Buildstarted

答えて

9

確かに、あなたは強く型付けされたビューを持っていると仮定してみましょう:

public ActionResult SomeAction(Obj obj) 
{ 
    ... 
} 

このOBJの程度だけの発言は、それが代わりのパブリックプロパティを持っています

@model Obj 

<script type="text/javascript"> 
    // Serialize the model into a javascript variable 
    var model = @Html.Raw(Json.Encode(Model)); 

    // post the javascript variable back to the controller 
    $.ajax({ 
     url: '/home/someAction', 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.serialize(model), 
     success: function(result) { 
      // TODO: do something with the results 
     } 
    }); 
</script> 

とコントローラのアクションで

いくつかのフィールド:

public class Obj 
{ 
    public string A { get; set; } 
    public int B { get; set; } 
    public double C { get; set; } 
} 
+0

...そしてコントローラメソッドでそれを逆シリアル化します。 –

+1

@Robert Harvey、何もせずに、ASP.NET MVC 3がそれを行います。 –

+0

全体のHtml.Rawは見た目が固いですが、モデルをエンコードすると構文エラーが発生します。 –

0

のjQuery :::

.ajax{ 
    type: "POST", 
    url: "yourUrl/UpdateObj", 
    data: $("someHTMLForm").serialize(), 
    contentType: "application/json; charset=utf-8" 
    success: function(data){ 
      //data will house your JsonResult 
    } 
} 
+0

逆シリアル化する必要はありません。 application/json contentTypeはMVCにJSONオブジェクトと.NETオブジェクトのマッチングを動的シリアライザ(System.Web.Services.Script.JavaScriptSErializerクラス)を介して指示します – Jonathan

関連する問題