【问题标题】:Child records not posting on ASP.NET MVC form子记录未在 ASP.NET MVC 表单上发布
【发布时间】:2010-10-17 03:11:06
【问题描述】:

我有两个表,Author 和 Book,一个作者可以有很多书。我有一个编辑视图设置为“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 集合不是帖子的一部分 - book_count 为零,即使显示了几本书。

是我做错了什么,还是我对帖子的期望过高?我怎样才能做到这一点?

【问题讨论】:

    标签: asp.net-mvc model-view-controller post


    【解决方案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 %>
    <% } %>
    

    ...然后这应该会作为您的 Authors 对象中的图书收藏为您很好地打包回来。看看这是否能让你朝着正确的方向前进。

    编辑 还有一种想法。我正在使用 UpdateModel 方法来获取结果。没关系,但我想我会把它扔在那里。

    【讨论】:

    • 我有点困惑。隐藏的值不应该是 "books["+i+"]..." 或 "author.book["+i+"]..." 之类的吗?另外,我假设第 2 行开头的“book”应该是“item”。
    • 另外,为什么“checked_out”不需要和“book_name”一样的控件命名?
    【解决方案2】:

    有关此问题的完整答案,请参阅 here。我基本上不明白 MVC 想要如何命名变量。

    【讨论】:

      猜你喜欢
      • 2017-01-18
      • 2023-04-09
      • 2012-06-03
      • 2011-08-21
      • 2011-01-15
      • 2014-05-07
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多