Asp.net mvc 无法在视图模型中对集合进行模型绑定
我有这样的看法:Asp.net mvc 无法在视图模型中对集合进行模型绑定,asp.net-mvc,Asp.net Mvc,我有这样的看法: @model Foo @Html.DisplayFor(model => model.FooName); @{ int counter = -1; } @foreach(var bar in Model.Bars) { counter++; <tr> <td><span name = "Bars[@counter].BarName">@bar.BarName</span></td>
@model Foo
@Html.DisplayFor(model => model.FooName);
@{
int counter = -1;
}
@foreach(var bar in Model.Bars)
{
counter++;
<tr>
<td><span name = "Bars[@counter].BarName">@bar.BarName</span></td>
</tr>
}
我省略了这个问题中不必要的和明显的部分,例如表的标记。您应该理解,在
表单
post上,您只在输入中发布值
,因此您应该这样做:
@for(var i = 0; i < Model.Bars.Count(); i++)
{
<tr>
<td><span>@Html.TextBoxFor(x=> Model.Bars[i].BarName)</span></td>
</tr>
}
for(var i=0;iHtml.TextBoxFor
helper创建可发布到控制器的input
。Aspan
不是表单控件。您需要一个
。使用for
循环-for(int i=0;im.bar[i].BarName)}
谢谢。如果我不想要文本框怎么办。是否有一个只读控件,我可以直接显示并发回?我知道我可以禁用文本框,但我还是很好奇。html
是否控制回发?始终可以使用html.HiddenFor()
进行此操作purpose@WaterCoolerv2,您可以使用@Html.HiddenFor()
,但将所有这些数据发送到客户端,然后将其全部原封不动地发回有什么意义呢。如果需要,只需在控制器中重新获取集合it@StephenMuecke我知道我能做到。只需将数据发回就可以降低性能要求。它用一点带宽换取CPU时间,因为这些数据是从大量连接中获取的。@WaterCoolerv2,取决于数据量,并且您可以始终使用会话
。但你正在向过度发布攻击敞开大门
public ActionResult DoStuffWithFoo(Foo foo)
{
Debug.Assert(foo.Bars != null); // fails
}
@for(var i = 0; i < Model.Bars.Count(); i++)
{
<tr>
<td><span>@Html.TextBoxFor(x=> Model.Bars[i].BarName)</span></td>
</tr>
}