2012-02-21 10 views
2

強く型付けされたビューモデルをこのjquery ajax呼び出しのデータパラメータとして渡す簡単な方法はありますか?私が見たすべての例は、自分自身でjsonを構築する必要があります。 {プロパティ: "値"など}いくつかの美しいjsヘルパー/ codzはこれをやっていないですか?jquery ajax投稿にデータ型パラメータとして強力な型のモデルを渡す方法は?

$.ajax({ 
     url: '/mycontroller/myaction', 
     type: 'POST', 
     data: <== Here 
     contentType: 'application/json; charset=utf-8', 
     success: function (data.success) { 
      alert(data); 
     }, 
     error: function() { 
      alert("error"); 
     } 
    }); 
+0

これに対して実行可能な回答が見つかりましたか? – Kixoka

答えて

1

あなたはJavascriptSerializer使用ヘルパー書くことができます:好き

public static IHtmlString ToJson<TModel>(this HtmlHelper<TModel> html, object data) 
{ 
    var serializer = new JavaScriptSerializer(); 
    return new HtmlString(serializer.Serialize(data)); 
} 

をし、それを呼び出す:私もこれを行うためのヘルパーを書いた

@Html.ToJson(myData) 

(あなただけ盗むことができコードを使用するか、Nugetパッケージを使用してください):

https://github.com/paultyng/FluentJson.NET

あなたは、この(ノックアウト拡張メソッドを注意してください)のように表示カミソリでJSONを作成することができます。これは、次のようなJSON生じるであろう

@JsonObject.Create() 
     .AddProperty("name", "value") 
     .AddProperty("childObject", c => { 
      .AddProperty("childProperty", "value2") 
     }) 

{"name":"value","childObject":{"childProperty":"value2"}} 

をそれはJSON.NETを使用していますシリアライザではなく、組み込みのものであれば、独自のコードに簡単に適合させることができます。

+0

はおいしいかもしれません。私はmvcの内部機能に堪能ではありませんが、ViewModelのプロパティ名とそのすべてを一致させるだけで、モデルの検証やコントローラ内のすべての検証が行われます。 json objに他のファンキーな不器用な小道具を追加する必要はありませんか? – gangelo

+0

ええ、[DefaultModelBinder'](http://msdn.microsoft.com/en-us/library/system.web.mvc.defaultmodelbinder.aspx)(これはデフォルトで使用されています)は、モデルで使用したデータアノテーションを適用します。 –

+0

モデルの変更をポストバックしたいので、これはポストバックではうまくいかないことが分かりました。 – gangelo

関連する問題