2009-04-02 24 views
1

私は著者と書籍の2つのテーブルを用意しています。私は "System.Web.Mvc.ViewPage(of MyDatabase.Author)"として設定された編集ビューを持っています。フォームが書籍情報を編集することで、著者およびすべての彼の本を表示するように設定されている:コントローラで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%> 

、私はポストの機能を持っている:

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

問題Booksコレクションがポストの一部ではないということです。ブックが複数表示されていても、book_countはゼロです。

私は何か間違っているのですか、または投稿にあまりにも多くを期待していますか?どうすればこの作品を作れますか?

答えて

1

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

...そしてこれはすべてうまく自分の著者に本のコレクションとしてあなたのためのオブジェクトパッケージに戻ってくる必要があります。それが正しい方向に向かうかどうかを確認してください。

EDIT もう1つの考えもあります。私はUpdateModelメソッドを使用して結果を取得しています。それは問題ではありませんが、私はそこにそれを投げると思っていました。

+0

私は少し混乱しています。隠された価値は "books [" + i + "] ..."または "author.book [" + i + "] ..."なのかな?また、私は2行目の最初の "本"は "アイテム"であると仮定しています。 – gfrizzle

+0

また、なぜ "checked_out"には "book_name"と同じ種類のコントロール命名が必要なのでしょうか? – gfrizzle

+0

うん、そうだよ。ここで少しコードを整理してみましょう。 –

1

この問題に対する完全な回答についてはhereを参照してください。私は基本的にMVCがどのように変数の名前をつけたいのかを知らなかった。

関連する問題