2015-09-30 43 views
1

我有像这样在一个视图中绑定的集合:无法建模视图模型

@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> 
} 

其中:

class Foo 
{ 
    public string FooName { get; set; } 

    public ICollection<Bar> Bars { get; set; } 
} 

class Bar 
{ 
    public string BarName { get; set; } 
} 

即使我的观点有它的权利,当我回来后的Foo但是,它不会回发它的Bars

public ActionResult DoStuffWithFoo(Foo foo) 
{ 
    Debug.Assert(foo.Bars != null); // fails 
} 

我已经省略了这个问题中不必要的和明显的部分,例如表格的标记。

+1

“span”不是表单控件。你需要一个''。并使用'for'循环 - 'for(int i = 0; i m.Bars [i] .BarName)}' –

回答

2

你应该明白,在form后您只张贴在inputs值,所以你应该到这样的事情:

@for(var i = 0; i < Model.Bars.Count(); i++) 
{ 
    <tr> 
    <td><span>@Html.TextBoxFor(x=> Model.Bars[i].BarName)</span></td> 
    </tr> 
} 

Html.TextBoxFor助手创建input,您可以张贴到控制器。

+0

谢谢。如果我不想要一个文本框会怎么样?有没有像我只能显示的只读控件,还有后期?我知道我可以禁用文本框,但仍然,我很好奇。 html'

+0

你总是可以使用'Html.HiddenFor()'来达到这个目的 –

+1

@ WaterCoolerv2,你可以使用'@ Html.HiddenFor()',但是发送所有数据到客户端然后再发回它的意义何在?不变。只需在控制器中重新获得收集,如果你需要它 –