Дочерние записи не публикуются в форме ASP.NET MVC - PullRequest
1 голос
/ 02 апреля 2009

У меня есть две таблицы, Автор и Книга, где у автора может быть много книг. У меня есть представление редактирования, настроенное как «System.Web.Mvc.ViewPage (of MyDatabase.Author)». Форма предназначена для отображения автора и всех его книг с возможностью редактирования информации о книге:

<% Using Html.BeginForm()%>
<%=Model.author_name%> <br/>
<% For Each item In Model.Books%>
<%=Html.CheckBox("checked_out")%>
<%=item.book_name%> <br/>
<% Next%>
<input type="submit" value="Save" />
<% End Using%>

В контроллере у меня есть функция Post:

<ActionName("Edit"), AcceptVerbs(HttpVerbs.Post)> _
Function Save(ByVal form As Author) As ActionResult
   Dim book_count = Author.Books.Count
End Function

Проблема в том, что коллекция Books не является частью post - book_count равен нулю, хотя отображается несколько книг.

Я делаю что-то не так или ожидаю слишком многого в сообщении? Как я могу сделать эту работу?

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

См. здесь для полного ответа на эту проблему. Я в основном не понял, как MVC хотел, чтобы переменные были названы.

1 голос
/ 02 апреля 2009

Я полагаю, ваша проблема в том, что "магическому парсеру" для 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 для получения результатов. Это не должно иметь значения, но я думал, что добавлю это туда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...