2010-11-23 12 views
0

現在、テーブル行から選択したレコードを取得するコントローラには、多数のメソッドがあります。ASP.NET MVCがjQueryのコントローラパラメータにマッピングオブジェクト配列を渡します。

だから私は

var ids = []; 
var prices = []; 
var customers = []; 

$selectedRow.each(function() { 
    ids.push($(this).find('.id').text()); 
    prices.push($(this).find('.price').text()); 
    customers.push($(this).find('.customer').text()); 
}); 

$.post(....) // AJAX call to controller method 

のようなものがあるかもしれませんし、コントローラに、私はイテレータを使用して対処するだけで少し厄介です

public ActionResult DoSomething(int[] ids, double[] prices, string[] customers) { ... } 

で終わります。私が本当に欲しいこと

Class Foo 
{ 
    int id; 
    double price; 
    string customer; 
} 

を持っており、

public ActionResult DoSomething(List<Foo> foos) { ... } 

を受け取ることができるようにすることです

が可能である。この?

答えて

3

は、Aはハックビットが、ここでの例です:

// query array: construct this as usual 
var array = [{ id: '1', name: 'name 1' }, { id: '2', name: 'name 2'}]; 

// map the array into an array of DOM hidden fields 
var query = $.map(array, function (element, index) { 
    return [$(document.createElement('input')) 
        .attr('type', 'hidden') 
        .attr('name', 'foos[' + index + '].id') 
        .val(element.id), 
       $(document.createElement('input')) 
        .attr('type', 'hidden') 
        .attr('name', 'foos[' + index + '].name') 
        .val(element.name) 
       ]; 
}); 

// construct a form 
var form = $(document.createElement('form')); 
$(query).appendTo(form); 

$.ajax({ 
    url: '<%: Url.Action("Test") %>', 
    data: form.serialize(), 
    dataType: 'json', 
    success: function (result) { 
     alert('success'); 
    } 
}); 

これが正常にフォームのコントローラのアクションにバインドします:

public class Foo 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

備考:Fooの

public ActionResult Test(IEnumerable<Foo> foos) 
{ 
    ...  
} 

ます場合は、すべてこれは必要ありませんconfigure your controller action to accept JSON。 ASP.NET MVC 3では、これがフレームワークに自動的に含まれます。

+0

ハックポストが面白そうに見える、私はそれをチェックします。 – fearofawhackplanet

0

はいです。

詳細はquestionをご覧ください。

また、これらのリソースはあなたを助けることができます。

+0

私はフォームにバインドするつもりはないが、それらのソリューションは、jQueryの提出された値で動作しませんか? – fearofawhackplanet

+0

はい、 '(" #form ")serialize()'を使用するとフォーム – Lorenzo

+0

が送信されますが、フォームはありません! – fearofawhackplanet

0

フィル・ハークも、この上のブログの記事を書いた:またModel Binding To A List

、MVCを3のモデルバインダーはJをサポートしますSONポストデータだと思う - しかし、これは明らかに、今日あなたを助けるために行くのではありません:(

0

私の場合、ビューは返されません。そのコールバックの警告を表示する

関連する問題