Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用列表的列表发布表单MVC_C#_Asp.net Mvc_Razor_Model View Controller - Fatal编程技术网

C# 使用列表的列表发布表单MVC

C# 使用列表的列表发布表单MVC,c#,asp.net-mvc,razor,model-view-controller,C#,Asp.net Mvc,Razor,Model View Controller,大多数教程,我在网上找到的关于模型何时有一个项目列表的问题。但在我的例子中,我有一个项目列表,它还有一个项目列表 我有一个带有ItemA列表的ViewModel,而ItemA有一个ItemsB public class ViewModel { List<ItemA> Items { get; set; } public ViewModel() { Items = new List<ItemA&g

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

我有一个带有
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 

    }

我的问题是,如何为这种情况编写表单,使其绑定回Controller中的ViewModel?

这相当简单-您只需在视图中为循环嵌套2个
(不要使用foreach)

ie更改为:

@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>
}
@Html.BeginForm(){
@对于(int j=0;j
@Html.HiddenFor(m=>m.Items[j].ItemAId)
@*(别忘了这个!)*@
对于(int i=0;im.Items[j].ItemBList[i].ItemBId)
@Html.TextBoxFor(m=>m.Items[j].ItemBList[i].NewInput)
}
}
提交
}

MVC模型绑定器要求将表示列表中属性的表单字段命名为
[#].propertyName
[#].propertyName
,以便在回发后绑定期间正确地将它们相互关联。同样的原则也适用于listitems的列表属性。使用HTML帮助程序时,需要使用
for
循环而不是
foreach
循环来获取正确的表单字段名

MVC中没有回发机制。请使用for loop for it。@我使用的是EhsanSajjad for loop,我得到的是null。您确实有任何与ItemA记录关联的ItemB记录吗?您能告诉我它的外观吗?我的意思是-用户界面是什么?用户可以选择一个项目A或单个项目B,也可以选择多个元素?也许这是一个放置cascade下拉列表的地方?请更准确地描述它。@James S似乎正在我的测试项目中工作。谢谢
public ActionResult SaveInfo(ViewModel model){
// Update
}
@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>
}