ASP.NET MVC передает массивы отображаемых объектов в параметры контроллера из jQuery - PullRequest
0 голосов
/ 23 ноября 2010

У меня в настоящее время есть несколько методов в моих контроллерах, которые берут выбранные записи из строк таблицы.

Так что у меня может быть что-то вроде

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) { ... }

возможно ли это?

Ответы [ 4 ]

3 голосов
/ 23 ноября 2010

Немного странно, но вот пример:

// 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 ActionResult Test(IEnumerable<Foo> foos) 
{
    ...    
}

где Foo:

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

Примечание: все это не нужно, если вы настраиваете действие контроллера для принятия JSON . В ASP.NET MVC 3 это автоматически включается в каркас.

0 голосов
/ 18 июля 2011

В моем случае представление не возвращается. Показывает предупреждение при перезвоне

0 голосов
/ 23 ноября 2010

Фил Хаак тоже написал в блоге сообщение: Привязка модели к списку

Кроме того, связыватель моделей MVC 3 будет поддерживать почтовые данные JSON, я думаю, но сегодня это, очевидно, не поможет: (

0 голосов
...