2009-04-02 5 views
1

작성자가 많은 책을 가질 수있는 작성자 및 예약 테이블이 두 개 있습니다. "System.Web.Mvc.ViewPage (of MyDatabase.Author)"로 설정된 편집보기가 있습니다. 양식이 책의 정보를 편집 할 수있는 기능으로, 저자와 그의 모든 책을 표시하도록 설정됩니다ASP.NET MVC 양식에 게시되지 않은 하위 레코드

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

문제 : 컨트롤러에서

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

을, 나는 포스트 기능을 가지고있다 Books 컬렉션이 게시물의 일부가 아니라는 것입니다. 책이 여러 개 표시 되더라도 book_count는 0입니다.

내가 뭔가 잘못하고있는 것입니까, 아니면 게시물에 너무 많이 기대합니까? 이 작품을 어떻게 만들 수 있습니까?

답변

1

MVC의 "마법 파서"는 모자를 쓰지 않아도된다는 것이 당신의 문제라고 생각합니다. 컬렉션에 열거 된 게시물을 다시 가져올 수있는 항목을 페이지에 넣으면 "물건"이름을 지정해야합니다. 그래서, 내 페이지에서 내가 한 것은 위의 책 이름과 같이 필드를 편집 할 수 없도록하려는 경우 MVC에서 얻을 수있는 컨트롤에서 숨겨진 필드를 사용하여 값을 래핑하는 것입니다. magic을 선택하고 그 값을 사용자에게 표시합니다. 그래서, 그것은 같은 것을 볼 수 있었다 :

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

을 ... 당신의 저자 객체에서 다음이 책의 컬렉션으로 당신을 위해 다시 모두 잘 포장 와야한다. 그것이 올바른 방향으로 오는지보십시오.

편집 다른 생각도 있습니다. UpdateModel 메서드를 사용하여 결과를 가져옵니다. 그건 중요하지 않아,하지만 내가 거기에 버릴 줄 알았다.

+0

조금 혼란 스럽습니다. 숨겨진 가치가 "books ["+ i + "] ..."또는 "author.book ["+ i + "] ..."일까요? 또한 2 행의 시작 부분에있는 "책"이 "항목"이어야한다고 가정합니다. – gfrizzle

+0

또한 "checked_out"에 "book_name"과 같은 종류의 컨트롤 이름이 필요하지 않은 이유는 무엇입니까? – gfrizzle

+0

네, 맞습니다. 코드를 좀 더 정리하자. –

1

이 문제의 해답을 보려면 here을 참조하십시오. 기본적으로 MVC가 변수의 이름을 지정하는 방법을 알지 못했습니다.

관련 문제