Asp.net mvc 未在ASP.NET MVC表单上过帐的子记录
我有两张桌子,作者和书,一个作者可以有很多书。我已经将编辑视图设置为“System.Web.Mvc.ViewPage(MyDatabase.Author的)”。表单设置为显示作者及其所有书籍,并具有编辑书籍信息的能力:Asp.net mvc 未在ASP.NET MVC表单上过帐的子记录,asp.net-mvc,model-view-controller,post,Asp.net Mvc,Model View Controller,Post,我有两张桌子,作者和书,一个作者可以有很多书。我已经将编辑视图设置为“System.Web.Mvc.ViewPage(MyDatabase.Author的)”。表单设置为显示作者及其所有书籍,并具有编辑书籍信息的能力: <% Using Html.BeginForm()%> <%=Model.author_name%> <br/> <% For Each item In Model.Books%> <%=Html.CheckBox("chec
<% 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
_
函数保存(ByVal表单作为作者)为ActionResult
Dim book\u count=Author.Books.count
端函数
问题是,即使有几本书被展示,书籍收藏也不属于post-book_计数为零的部分
是我做错了什么,还是我对这个职位期望过高?我怎样才能做到这一点呢?我相信你的问题是,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 %>
<% } %>
有关此问题的完整答案,请参见。我基本上不知道MVC希望如何命名变量。我有点困惑。隐藏的值不应该是“books[“+i+”]…”或“author.book[“+i+”]…”之类的吗?另外,我假设第2行开头的“book”应该是“item”。另外,“checked_out”为什么不需要与“book_name”相同的控件命名?