Asp.net mvc 模型中未返回集合
我有一个从视图模型填充的视图,其中一个属性是复杂类型的集合。视图正确呈现,列表被迭代到一个表中,对于每个尚未选择的项,都有一个单选按钮。当我提交表单时,我无法将对象列表返回到模型中,也无法找出我做错了什么。集合中的每个项目都将添加到视图中,如下所示:Asp.net mvc 模型中未返回集合,asp.net-mvc,asp.net-mvc-4,html-helper,Asp.net Mvc,Asp.net Mvc 4,Html Helper,我有一个从视图模型填充的视图,其中一个属性是复杂类型的集合。视图正确呈现,列表被迭代到一个表中,对于每个尚未选择的项,都有一个单选按钮。当我提交表单时,我无法将对象列表返回到模型中,也无法找出我做错了什么。集合中的每个项目都将添加到视图中,如下所示: @for (int i = 0; i < Model.Items.Count; i++ var rowClass = "selectRow"; if (item.IsSelected) { rowCl
@for (int i = 0; i < Model.Items.Count; i++
var rowClass = "selectRow";
if (item.IsSelected)
{
rowClass = "success";
}
<tr class="@rowClass">
@Html.HiddenFor(m => m.Items[i].PropertyOne)
<td>
@Html.DisplayFor(m => m.Items[i].PropertyTwo)
</td>
<td class="actions">
// only those items not previously selected need a radio button
@if (item.IsSelected == false)
{
@Html.RadioButtonFor(m => m.Items[i].IsSelected, m.Items[i].PropertyOne, new { id = "IsSelected_" + m.Items[i].PropertyOne })
}
</td>
</tr>
}
@for(int i=0;im.Items[i].PropertyOne)
@DisplayFor(m=>m.Items[i].PropertyTwo)
//只有以前未选择的项目才需要单选按钮
@如果(item.IsSelected==false)
{
@Html.RadioButtonOn(m=>m.Items[i].IsSelected,m.Items[i].PropertyOne,新的{id=“IsSelected_”+m.Items[i].PropertyOne})
}
}
我曾尝试使用@Html.HiddenFor(x=>x.PropertyOne),但我无法将所选值的集合绑定回模型。我可以使用隐藏字段返回模型中的所有其他内容,但我不知道如何修复此问题。欢迎提供任何帮助
谢谢如果您想将收藏正确地发布到模型活页夹,则不能使用
foreach
循环(除非您使用的是EditorFor
,请参阅注释)。您必须使用一个好的老式for
循环,并从IList
派生您的收藏。有关更多信息,请参阅我的问题和答案
此外,对于要发布的集合对象类型的任何属性,都需要确保它在循环中使用
public class Item
{
public int ItemId { get; set; }
public string ItemDescription { get; set; }
public bool IsSelected { get; set; }
}
@for(var i = 0;i < Model.Items.Count; i++)
{
<tr>
@Html.HiddenFor(m => Model.Items[i].ItemId)
<td>
@Html.TextBoxFor(m => Model.Items[i].Description)
</td>
<td>
@Html.CheckBoxFor(m => Model.Items[i].IsSelected)
</td>
</tr>
}
…您的循环可能如下所示:
public class Item
{
public int ItemId { get; set; }
public string ItemDescription { get; set; }
public bool IsSelected { get; set; }
}
@for(var i = 0;i < Model.Items.Count; i++)
{
<tr>
@Html.HiddenFor(m => Model.Items[i].ItemId)
<td>
@Html.TextBoxFor(m => Model.Items[i].Description)
</td>
<td>
@Html.CheckBoxFor(m => Model.Items[i].IsSelected)
</td>
</tr>
}
…不会发布,但会将其隐藏或在HTML元素中使用
@Html.HiddenFor(m => Model.Items[i].Description)
将正确张贴和绑定
Phil Haack关于这一主题的权威文章之一可以找到。我已经看过了,但是当我将foreach更改为for循环时,无法获得提交的视图。请查看我的编辑,并将您的修订代码与原始问题中的
for
循环一起发布为编辑,以便我们可以看到您得到了什么。您好@AJ,您的answer是正确的。有一点是它不必为使用,你仍然可以使用foreach。看看这个链接:@Lin-谢谢,我不知道EditorFor
会跨线处理foreach
。@crunchy-我不相信DisplayFor
会绑定,除了for>中缺少的右偏执
loop,你的代码看起来还不错。你摆弄过它来看看发布了什么吗?弄清楚这里发生了什么的最好方法是看看模型。发布时,电线上有什么项目。你用过摆弄器吗?或FireBug?