2012-02-21 3 views
0

これに関してフォーラムに他の質問がありますが、これまでに有益な解決策が見つかりました。 私は定義されたコントローラを有する:ASP.NET MVCにExt.Netストアのポスト・アレイ

[HttpPost] 
    public ActionResult Update(int id, IList<MyObject> data) 
    { 
     return Json(new { success = false, message = "saved!" }); 
    } 
MyObject

A JSON配列はJsonStore内にあるとsubmitData()関数呼び出し上に送信されます。私はすべてが正しく送信されていることを見ることができます、私が手動で行う場合、 "データ"パラメータはMyObjectの配列ですJSON.Deserialize<IList<MyObject>>(data)私は正確に私が見ることができるヘッダーでデータが有効なJSON文字列であることを意味します。 "application/json"コンテンツタイプ。 私はすでにJsonValueProviderFactoryを使用していますが、それは役に立ちません。私の理解から、値プロバイダはIListに配列を簡単にマップする必要があるようですので、私が何か間違っているかどうか疑問に思っています。

ありがとう!

UPDATE 私は少し異なる使用シナリオを持っている1つのコメントで述べたように:私は実際にStore.submitData()の呼び出しによって、このデータを掲載しています...どうやら、ヘッダが類似しているにもかかわらず、店を提出しますそれは実際に文字列を生成するため動作しません。

ストアにJSON.stringifyのような何かをさせる方法に関する知識はありますか?

答えて

1
あなたのクライアントコードを示していないが、以下では正常に動作する必要があります

Ext.Ajax.request({ 
    url: '@Url.Action("update", new { id = "123" })', 
    method: 'POST', 
    headers: { 'Content-Type': 'application/json' }, 
    params: JSON.stringify({ 
     data: [ 
      { foo: 'value 1' }, 
      { foo: 'value 2' }, 
      { foo: 'value 3' } 
     ] 
    }), 
    success: function (response) { 
     alert(response.responseText); 
    } 
}); 

それはMyObjectは次のように定義されていることを前提としています

public class MyObject 
{ 
    public string Foo { get; set; } 
} 

もちろんそれだけでいずれかの可能性複雑なオブジェクト。

+0

クール、それはまさに必要なものです。これはJsonValueProviderがなくても動作することに注意する必要があります。 私は実際にこのデータをAjaxリクエストではなくStore.submitData()コールを介してポストしています...明らかに、ヘッダーは似ていても、ストアの送信は実際には文字列。 ストアにJSON.stringifyのような何かをさせる方法を知っている人はいますか? – Tallmaris

+0

@Tallmaris、JsonValueProviderはASP.NET MVC 3に組み込まれています。それが機能する理由です。カスタム値プロバイダを作成しないと、ASP.NET MVC 2ではこれが動作しません。 –