C# 将嵌套集合从MVC视图发布到控制器
我有一个C# 将嵌套集合从MVC视图发布到控制器,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个行列表,其中包含一个行列表,每行都有一个行列表 这就是结果: 景色 <table class="table"> <tr> <th> @Html.DisplayName("Nome do Grupo") </th> <th> @Html.DisplayName("Linhas") </th> <th></th> </
行列表
,其中包含一个行列表
,每行都有一个行列表
这就是结果:
景色
<table class="table">
<tr>
<th>
@Html.DisplayName("Nome do Grupo")
</th>
<th>
@Html.DisplayName("Linhas")
</th>
<th></th>
</tr>
@using (Html.BeginForm("Forms", "ProcessLane", FormMethod.Post))
{
foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.GroupName)
</td>
<td>
@{
foreach (var t in item.RowLane)
{
@Html.CheckBoxFor(model => t.IsChecked)
@Html.DisplayFor(modelItem => t.LaneName)
}
}
</td>
<td>
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Adicionar" class="btn btn-default" />
</div>
</td>
</tr>
}
}
@Html.DisplayName(“Nome do Grupo”)
@Html.DisplayName(“Linhas”)
@使用(Html.BeginForm(“Forms”、“ProcessLane”、FormMethod.Post))
{
foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.GroupName)
@{
foreach(item.RowLane中的变量t)
{
@Html.CheckBoxFor(model=>t.IsChecked)
@DisplayFor(modeleItem=>t.LaneName)
}
}
}
}
课程及类别:
public class Line
{
public int IdGroup { get; set; }
public string GroupName { get; set; }
public List<RowLane> RowLane { get; set; }
}
public class RowLane
{
public string IdLane { get; set; }
public string LaneName { get; set; }
public bool IsChecked { get; set; }
}
公共类行
{
公共int IdGroup{get;set;}
公共字符串组名{get;set;}
公共列表行车道{get;set;}
}
公共级赛道
{
公共字符串IdLane{get;set;}
公共字符串LaneName{get;set;}
已检查公共布尔值{get;set;}
}
我只需要收集所选行的GroupID和所有复选框。在您的场景中,要将所选行的数据从视图发布到控制器,您只需:
@model List<Path.To.Your.Models.Line>
@{
ViewBag.Title = "test";
}
<h2>test</h2>
@for (var i = 0; i < Model.Count; i++)
{
<form action=@Url.Action("ProcessLane", new { IdGroup = Model[i].IdGroup}) method="post">
<div class="row parentWrap">
@for (var j = 0; j < Model[i].RowLane.Count; j++)
{
<div class="row">
@Html.Hidden("[" + j + "].IdLane", Model[i].RowLane[j].IdLane)
@Html.Hidden("[" + j + "].LaneName", Model[i].RowLane[j].LaneName)
@Html.CheckBox("[" + j + "].IsChecked")
@Html.Label(Model[i].RowLane[j].LaneName)
</div>
}
<input type="submit" class="btn btn-primary sss" value="send" />
</div>
</form>
<hr />
}
@型号列表
@{
ViewBag.Title=“测试”;
}
测试
@对于(var i=0;i
}
还有一些要在控制器中检查的示例数据:
public ActionResult test()
{
IEnumerable<Line> line = new List<Line>
{ new Line{
IdGroup = 100,
GroupName = "Nojan",
RowLane = new List<RowLane> { new RowLane { IdLane = "1", IsChecked = true, LaneName = "pizza"},
new RowLane { IdLane = "2", IsChecked = false, LaneName = "lazogna"}
}
},
new Line{
IdGroup = 101,
GroupName = "Noj",
RowLane = new List<RowLane> { new RowLane { IdLane = "3", IsChecked = false, LaneName = "pizza"},
new RowLane { IdLane = "4", IsChecked = false, LaneName = "lazogna"}
}
}
};
return View(line.ToList());
}
public ActionResult ProcessLane(int? IdGroup, List<RowLane> input)
{
// Code here as you wish, form is submitted to this method
}
公共操作结果测试()
{
IEnumerable行=新列表
{新线{
IdGroup=100,
GroupName=“Nojan”,
RowLane=new List{new RowLane{IdLane=“1”,IsChecked=true,LaneName=“pizza”},
新建行车道{IdLane=“2”,IsChecked=false,LaneName=“lazogna”}
}
},
新线{
IdGroup=101,
GroupName=“Noj”,
RowLane=new List{new RowLane{IdLane=“3”,IsChecked=false,LaneName=“pizza”},
新建行车道{IdLane=“4”,IsChecked=false,LaneName=“lazogna”}
}
}
};
返回视图(line.ToList());
}
public ActionResult ProcessLane(int?IdGroup,列表输入)
{
//如您所愿在此处编码,表单将提交到此方法
}
我成功地运行并测试了代码。您可以根据需要定制
希望这有帮助:)在您的场景中,要将所选行的数据从视图发布到控制器,您只需:
@model List<Path.To.Your.Models.Line>
@{
ViewBag.Title = "test";
}
<h2>test</h2>
@for (var i = 0; i < Model.Count; i++)
{
<form action=@Url.Action("ProcessLane", new { IdGroup = Model[i].IdGroup}) method="post">
<div class="row parentWrap">
@for (var j = 0; j < Model[i].RowLane.Count; j++)
{
<div class="row">
@Html.Hidden("[" + j + "].IdLane", Model[i].RowLane[j].IdLane)
@Html.Hidden("[" + j + "].LaneName", Model[i].RowLane[j].LaneName)
@Html.CheckBox("[" + j + "].IsChecked")
@Html.Label(Model[i].RowLane[j].LaneName)
</div>
}
<input type="submit" class="btn btn-primary sss" value="send" />
</div>
</form>
<hr />
}
@型号列表
@{
ViewBag.Title=“测试”;
}
测试
@对于(var i=0;i
}
还有一些要在控制器中检查的示例数据:
public ActionResult test()
{
IEnumerable<Line> line = new List<Line>
{ new Line{
IdGroup = 100,
GroupName = "Nojan",
RowLane = new List<RowLane> { new RowLane { IdLane = "1", IsChecked = true, LaneName = "pizza"},
new RowLane { IdLane = "2", IsChecked = false, LaneName = "lazogna"}
}
},
new Line{
IdGroup = 101,
GroupName = "Noj",
RowLane = new List<RowLane> { new RowLane { IdLane = "3", IsChecked = false, LaneName = "pizza"},
new RowLane { IdLane = "4", IsChecked = false, LaneName = "lazogna"}
}
}
};
return View(line.ToList());
}
public ActionResult ProcessLane(int? IdGroup, List<RowLane> input)
{
// Code here as you wish, form is submitted to this method
}
公共操作结果测试()
{
IEnumerable行=新列表
{新线{
IdGroup=100,
GroupName=“Nojan”,
RowLane=new List{new RowLane{IdLane=“1”,IsChecked=true,LaneName=“pizza”},
新建行车道{IdLane=“2”,IsChecked=false,LaneName=“lazogna”}
}
},
新线{
IdGroup=101,
GroupName=“Noj”,
RowLane=new List{new RowLane{IdLane=“3”,IsChecked=false,LaneName=“pizza”},
新建行车道{IdLane=“4”,IsChecked=false,LaneName=“lazogna”}
}
}
};
返回视图(line.ToList());
}
public ActionResult ProcessLane(int?IdGroup,列表输入)
{
//如您所愿在此处编码,表单将提交到此方法
}
我成功地运行并测试了代码。您可以根据需要定制
希望这有帮助:)您可以使用编辑器模板来解决此问题,如中所述。另外,当表单处于循环之外时,多个提交按钮有什么意义?单击任何行的任何按钮都将提交所有数据。对于每个组,我可以为此组分配一个或多个车道。您能重新排列视图吗?您的意思是什么?想象一下这是一个列表视图,每行都有一个
onClick
方法,我要做的是,如果我单击此行的按钮,我得到所有选中项的值。您可以使用编辑器模板来解决此问题,如中所述。另外,当表单处于循环之外时,多个提交按钮有什么意义?单击任何行的任何按钮都将提交所有数据。对于每个组,我可以为此组分配一个或多个车道。您可以重新排列视图吗?您的意思是什么?假设这是一个列表视图,每行都有一个onClick
方法,我要做的是,如果单击此行的按钮,我将获得所有选中项的值。