【发布时间】:2009-08-09 12:30:07
【问题描述】:
我正在为 ASP.NET MVC 中的 Html.Checkbox 苦苦挣扎。想象一个员工有一组重复的孩子:
alt text http://img220.imageshack.us/img220/7208/deletechildrensnapshotk.png
“添加孩子”按钮工作正常,但我不能可靠地使用“删除选定的孩子”。我用这个渲染复选框:
<% int i = 0; %>
<% foreach (var item in Model.Children) { %>
<tr>
<td>
<%=Html.CheckBox("childrenToDelete[" + i + "]", false, new {value = item.Name})>
</td>
</tr>
<% i++; %>
<% } %>
以下是我的控制器操作如何从 FormCollection 中获取要删除的子项列表:
var childrenToDelete = new List<string>();
UpdateModel(childrenToDelete, "childrenToDelete");
然后我使用 ViewModel 模式创建一个对象,其中包含 Employee 和 Child 列表。我无法弄清楚为什么 85% 的时间我会在 Html.Checkbox 行的 View 中抛出异常。大约 15% 的时间,它工作正常。例外是“从类型'System.String'到类型'System.Boolean'的参数转换失败。” IE 然后显示:
- FormatException:字符串未被识别为有效的布尔值。
- FormatException: Bobby 不是布尔值的有效值。
当然,“Bobby”不是布尔值,所以它失败了。关于为什么 Html.Checkbox 试图将“Bobby”用作布尔值的任何线索?相同的 ViewModel 可以很好地添加孩子,所以我认为那里没有错误。
【问题讨论】:
-
请发布您的 POST 操作中的所有代码
-
@eu-ge-ne:这里是:pastebin.ca/1522362
-
更新:看起来我总是可以删除列表中的最后一个孩子。我传递给 ViewModel 的 newChildren 对象始终具有正确且更新的子级列表。我认为我在这里的策略是正确的,但我一定只是在某个地方有一个错误。
标签: asp.net-mvc