Я полагаю, ваша проблема в том, что "магическому парсеру" для MVC нечего повесить. Когда вы размещаете на своей странице элементы, которые вы хотите иметь возможность вернуть назад к сообщению, которое перечисляется внутри коллекции, вы должны давать названия своим "вещам". Итак, что я сделал на своей странице, так это если бы я не хотел, чтобы они могли редактировать поле, как, например, название вашей книги выше, я бы использовал скрытое поле, чтобы обернуть значение в элемент управления, к которому MVC может получить магия, а затем также отобразить это значение для пользователя. Таким образом, это может выглядеть примерно так:
<% for (i = 0; i < Model.Books.Count; i++) {
book = Model.Books[i] as book //I'm a C# guy so make this VB
<%= Html.CheckBox("author["+1+"].checked_out", book.checked_out) %>
<%= HtmlHidden("author["+i+"].book_name",book.book_name) %>
<%= book.book_name %>
<% } %>
... и тогда все это должно быть возвращено в виде коллекции книг в вашем объекте Authors. Посмотрите, приведет ли это вас в правильном направлении.
EDIT
Еще одна мысль тоже. Я использую метод UpdateModel для получения результатов. Это не должно иметь значения, но я думал, что добавлю это туда.