Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法在视图模型中对集合进行模型绑定_Asp.net Mvc - Fatal编程技术网

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;iModel.bar[i].BarName) }
Html.TextBoxFor
helper创建可发布到控制器的
input

A
span
不是表单控件。您需要一个
。使用
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>
}