2009-04-02 6 views
1

J'ai deux tables, Auteur et Livre, où un auteur peut avoir beaucoup de livres. J'ai une vue d'édition configurée comme "System.Web.Mvc.ViewPage (de MyDatabase.Author)". Le formulaire est configuré pour afficher l'auteur et tous ses livres, avec la possibilité de modifier les informations du livre:Les enregistrements enfants ne s'affichent pas sur le formulaire ASP.NET MVC

<% 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%> 

Dans le contrôleur, j'ai de la fonction Post:

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

Le problème est que la collection de livres ne fait pas partie du post - book_count est zéro, même si plusieurs livres sont affichés.

Est-ce que je fais quelque chose de mal, ou est-ce que je m'attends trop à la publication? Comment puis-je faire ce travail?

Répondre

1

Je crois que votre problème est que le "parseur magique" pour MVC n'a rien à accrocher son chapeau sur. Lorsque vous placez des éléments sur votre page que vous souhaitez pouvoir récupérer sur le post énumérés dans une collection, vous devez donner vos noms de "choses". Donc, ce que j'ai fait dans ma page est que si je ne voulais pas qu'ils puissent éditer un champ, comme votre nom de livre ci-dessus, j'utiliserais un champ caché pour recouvrir la valeur dans un contrôle que MVC peut obtenir via magie et ensuite afficher cette valeur à l'utilisateur. Ainsi, il pourrait ressembler à:

<% 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 %> 
<% } %> 

... et cela devrait revenir tout emballé pour vous bien comme une collection de livres dans vos auteurs objet. Voyez si cela vous mène dans la bonne direction.

EDIT Une autre pensée aussi. J'utilise la méthode UpdateModel pour récupérer les résultats. Cela ne devrait pas avoir d'importance, mais je pensais que je mettrais ça dedans.

+0

Je suis un peu confus. La valeur cachée ne devrait-elle pas être "books [" + i + "] ..." ou "author.book [" + i + "] ..." ou quelque chose? Aussi, je suppose que "livre" au début de la ligne 2 devrait être "article". – gfrizzle

+0

En outre, pourquoi "checked_out" n'a-t-il pas besoin du même nom de contrôle que "book_name"? – gfrizzle

+0

Oui, vous avez raison. Laissez-moi nettoyer le code un peu ici. –

1

Voir here pour la réponse complète à ce problème. En gros, je n'ai pas compris comment MVC voulait que les variables soient nommées.

Questions connexes