gpt4 book ai didi

c# - 使用列表列表发布表单 MVC

转载 作者:太空狗 更新时间:2023-10-30 01:18:18 25 4
gpt4 key购买 nike

我在网上找到的大多数教程和问题都是关于模型何时具有一个项目列表的。但在我的例子中,我有一个项目列表,其中还有一个项目列表。

我有一个包含 ItemA 列表的 ViewModel,ItemA 有一个 ItemsB 列表

 public class ViewModel
{
List<ItemA> Items { get; set; }

public ViewModel()
{
Items = new List<ItemA>();
}
}

public class ItemA
{
public int ItemAId { get; set; }
public List<ItemB> ItemBList { get; set; }

public ItemA()
{
ItemBList = new List<ItemB>();
}
}

public class ItemB
{
public int ItemBId { get; set; }

// Need to input this string for each Item in List<ItemA>
public string NewInput

}

我的看法:

@Html.BeginForm(){

@foreach (var itemA in Model.Items)
{
<p>@itemA.ItemAId</p>


for (int i = 0; i < itemA.ItemBList.Count; i++)
{
@Html.HiddenFor(m => itemA.ItemBList[i].ItemBId )

@Html.TextBoxFor(m => itemA.ItemBList[i].NewInput)

}
<button type="submit">Submit</button>
}

}

我的 Controller :

public ActionResult SaveInfo(ViewModel model){
// Update
}

我的问题是如何为这个案例编写一个表单,以便它绑定(bind)回 Controller 中的 ViewModel?

最佳答案

它相当简单 - 你只需要在 View 中嵌套 2 个 for 循环(不要使用 foreach)

即更改为:

@Html.BeginForm(){

@for(int j = 0; j < Model.Items.Count; j++)
{
<p>@Model.Items[j].ItemAId</p>
@Html.HiddenFor(m => m.Items[j].ItemAId)
@* (don't forget this!) *@


for (int i = 0; i < Model.Items[j].ItemBList.Count; i++)
{
@Html.HiddenFor(m => m.Items[j].ItemBList[i].ItemBId )

@Html.TextBoxFor(m => m.Items[j].ItemBList[i].NewInput)

}

}
<button type="submit">Submit</button>
}

MVC Model Binder 要求表示列表中属性的表单字段被命名为类似[#].property1name[#].property2name 的名称,以便正确关联它们在回发后绑定(bind)期间彼此。同样的原则适用于列表项的列表属性。在使用 HTML 帮助程序时,您需要使用 for 循环而不是 foreach 循环来获取正确的表单字段名称!

关于c# - 使用列表列表发布表单 MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27925865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com