绑定模型到列出嵌套模型

时间:2015-03-19 18:58:04

标签: c# asp.net-mvc-4 model-binding

我的模型具有很少的简单属性和一个嵌套的

public class GridViewModel 
{
    public property1 {get;set;}
    ...
    public List<Grid> Grids { get; set; }
}

public class Grid
{
    public int GridID { get; set; }
    public string GridName { get; set; }
    public string Description { get; set; }
    ...
}

在我看来,我循环遍历Model.Grids并列出所有属性。当我将模型发送回控制器时,它返回null。 我已按照Haacked说明如何绑定到列表http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ 我错过了什么吗? 在我看来,我尝试使用HiddenFor,TextBoxFor,但没有任何东西回来

 @for (int k = 0; k < Model.Grids.Count(); k++ )
{
     @Html.HiddenFor(modelItem => Model.Grids[k].GridID)
     @Html.TextBoxFor(modelItem => Model.Grids[k].GridID)
     @Html.DisplayFor(modelItem => Model.Grids[k].GridName)
     @Html.DisplayFor(modelItem => Model.Grids[k].Description)
}

Html就像

一样
<input id="Grids_1__GridID" name="Grids[1].GridID" type="hidden" value="230">
<input id="Grids_2__GridID" name="Grids[2].GridID" type="hidden" value="231"> 

3 个答案:

答案 0 :(得分:1)

有一个警告,我忘了提到,我通过ActionLink提交页面,传递了一个不同的参数。我的模型因为我没有提交我的页面而是召唤一个动作而空洞。我已经更新了一个提交按钮的链接,该按钮发布整个模型,现在工作正常。

//used before
@Html.ActionLink("Export Excel", "ExportToExcel", "Grid", new { GridID = "gridsid"}, new { id = "exportExcelLink" })

//switched to
<button type="submit" id="exportLink" name="exportBtn">[Export BTN]</button>

答案 1 :(得分:0)

由于您要回发HiddenForTextBoxFor,因此默认活页夹可能会变得混乱。我只想尝试:

@for (var k = 0; k < Model.Grids.Count(); k++)
{
    @Html.HiddenFor(m => m.Grids[k].GridID)
}

确保它是零索引的,你应该好好去。

另外,请注意我使用m来编制索引,而不是Model

答案 2 :(得分:0)

//define int variable
int i=0;

@foreach (var item in Model.Grids)
{
     @Html.HiddenFor(m=> m.Grids[i].GridID)
     @Html.TextBoxFor(m=> m.Grids[i].GridID)
     @Html.DisplayFor(m=> m.Grids[i].GridID)
     @Html.DisplayFor(m=> m.Grids[i].GridID)
i=i+1;
}