У меня та же проблема, и я нашел решение для нее. Не думаю, что это самое красивое, но оно идеально для меня, потому что одним из моих требований была возможность редактировать данные таблицы с помощью плагина jQuery Jeditable .
Итак, я генерирую таблицу, используя расширение GCC MVContrib:> 1005 *
Html.Grid<Somenamespace.Line>( Model.InvoiceLines )
.Attributes( id => "InvoiceGrid" )
.Columns( column => {
column.For( li => li.LineItem.ItemDescription ).Attributes( name => ".LineItem.ItemDescription", @class => "click" );
column.For( li => li.LineItem.InvoiceUnitNetPrice ).Named( "Unit net price " ).Attributes( name => ".LineItem.InvoiceUnitNetPrice", @class => "click" );
column.For( li => li.LineItem.InvoiceQuantity ).Attributes( name => ".LineItem.InvoiceQuantity", @class => "click" );
})
.Render();
//rest of the code
Html.Submit("_submit", "Save");
Прямо сейчас Вы можете редактировать на месте значения, но это не обновляет соответствующую модель.
Вся магия происходит после того, как пользователь нажимает кнопку отправки:
$(document).ready(function() {
$('#_submit').click(function(e) {
e.preventDefault();
$('#InvoiceGrid tbody tr').each(function(index) {
var hidden = $('<input />').attr({ type: 'hidden', name: 'InvoiceLines.Index', value: index });
$(this).children('td:first-child').before(hidden);
$(this).children('td:not(:first-child)').each(function() {
$(this).append($('<input />').attr({ type: 'hidden', value: $(this).text(), name: 'InvoiceLines[' + index + ']' + $(this).attr('name') }));
});
});
$('form').submit();
});
//editable stuff
$('.click').editable(function(value, settings) {
return (value);
}, { submit: 'OK' });
});
В каждом TD я создаю скрытый ввод, со значением из этого TD, в каждом вводе строки с индексом, и наиболее важным здесь является атрибут 'name': Имя коллекции в Model [здесь идет index] .rest .of.path , поэтому в данном конкретном случае (пример):
InvoiceLines[2].LineItem.ItemDescription
Надеюсь, это поможет, потому что богатая сетка не всегда ответ;)
С уважением
Матеуш