绑定模型以列出嵌套模型
Binding Model to List nested model
我的模型只有几个简单属性和一个嵌套属性
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 并列出所有属性。当我 POST 模型返回控制器时,它返回 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">
默认活页夹可能会混淆,因为您正在回发 HiddenFor
和 TextBoxFor
。我会简单地尝试:
@for (var k = 0; k < Model.Grids.Count(); k++)
{
@Html.HiddenFor(m => m.Grids[k].GridID)
}
确保它是零索引的,你应该可以开始了。
此外,请注意我使用 m
进行索引,而不是 Model
。
有一点我忘了提,我是通过传递不同参数的 ActionLink 提交页面的。我的模型变空了,因为我没有提交我的页面而是调用了一个动作。我已将 link 更新为一个发布整个模型的提交按钮,现在它工作正常。
//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>
//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;
}
我的模型只有几个简单属性和一个嵌套属性
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 并列出所有属性。当我 POST 模型返回控制器时,它返回 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">
默认活页夹可能会混淆,因为您正在回发 HiddenFor
和 TextBoxFor
。我会简单地尝试:
@for (var k = 0; k < Model.Grids.Count(); k++)
{
@Html.HiddenFor(m => m.Grids[k].GridID)
}
确保它是零索引的,你应该可以开始了。
此外,请注意我使用 m
进行索引,而不是 Model
。
有一点我忘了提,我是通过传递不同参数的 ActionLink 提交页面的。我的模型变空了,因为我没有提交我的页面而是调用了一个动作。我已将 link 更新为一个发布整个模型的提交按钮,现在它工作正常。
//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>
//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;
}