【问题标题】:Binding Model to List nested model将模型绑定到列表嵌套模型
【发布时间】:2015-03-19 18:58:03
【问题描述】:

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

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"> 

【问题讨论】:

  • DisplayFor 不会呈现任何将发布的内容。使用HiddenForEditorFor
  • @Marc 我确实尝试过为 GridID 属性使用 HiddenFor 和 EditorFor,但仍然没有发布任何内容。
  • 请将答案与问题分开发布。
  • 确定我会做@abatishchev

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


【解决方案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>

【讨论】:

    【解决方案2】:

    由于您回发HiddenForTextBoxFor,默认活页夹可能会变得混乱。我会简单地尝试:

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

    确保它是零索引的,你应该很高兴。

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

    【讨论】:

      【解决方案3】:
      //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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-03
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 2012-04-20
        • 2011-04-25
        • 1970-01-01
        相关资源
        最近更新 更多