Хорошо, в этом случае я покажу вам, как я это сделал, используя несколько возможностей:
Сначала я помещаю div внутри jquery с пустыми полями, например:
$("#add").click(function() {
$("#classes").append($(
"<div>"
+" <select name='Student.Classes[0].Class'>"
+" <option value='1'>Class 1</option>"
....
+" </select>"
+" <select name='Student.Classes[0].Subject'>"
+" <option value='1'>Subject 1</option>"
....
+" </select>"
+" <input name='Student.Classes[0].Score' value='0'/>"
+"</div>"
)
);});
Этот div будет добавлен в список классов при нажатии на что-то с идентификатором #add.
Далее я перехватываю форму перед отправкой и даю каждой сущности (в данном случае Student.Classes) индекс, начинающийся с 0. Вот так:
$("form").submit(function () {
$("div", "#classes").each(function (i) {
$(":input, :hidden", this).each(function () {
$(this).attr("name", $(this).attr("name").replace(/\[0\]/, "[" + i + "]"));
});
});
});
Если вы используете ModelBinder, который поддерживает дочерние объекты, это должно закончиться на сервере со списком Классов в Студенте. Конечно, вы можете использовать firebug, чтобы увидеть, что именно отправляется на сервер.
Надеюсь, это даст какое-то направление.