我正在尝试保存列表列表,其中有一个复选框,其中包含一些选项,其中有多个选项。我得到的第一个列表很好,但是“ children”道具总是返回null。
Internet上大多数解决方案都说必须在列表中设置索引,但是我并没有成功。
我看到有人遇到类似的问题:Post Form MVC with List of List
但是无法使用它,所以我希望你们能帮助我。
ViewModel
public class Input
{
public string title { get; set; }
public int id { get; set; }
public bool value { get; set; }
public List<Input> children { get; set; }
public Input()
{
children = new List<Input>();
}
}
控制器
[HttpGet]
public IActionResult Services()
{
var Inputs = new List<Input>() {
new Input(){title="test",id=1 },
new Input(){title="test2",id=2,
children =new List<Input>(){
new Input(){title="test3",id=3 },
new Input(){title="test4",id=4 }
} },
};
return View(Inputs);
}
[HttpPost]
public IActionResult Services(List<Input> model)
{
return Redirect("/");
}
查看
@model List<Input>;
<form asp-controller="Home" asp-action="Services" method="post">
@for (int i = 0; i < Model.Count; i++)
{
@Html.HiddenFor(m => m[i].title)
@Html.HiddenFor(m => m[i].id)
@Html.HiddenFor(m => m[i].children)
<div class="checkbox">
<label class="form-check-label">
@Html.CheckBoxFor(m => m[i].value, new { @class = "form-check-input collapser" })
@Model[i].title
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
</div>
if(Model[i].children != null){
string containerName = "["+i+"].value" + "Container";
<div name="@containerName">
<div class="checkbox">
@for (int c = 0; c < Model[i].children.Count; c++){
@Html.HiddenFor(m => m[i].children[c].title)
@Html.HiddenFor(m => m[i].children[c].id)
@Html.HiddenFor(m => m[i].children[c].children)
<label class="form-check-label">
@Html.CheckBoxFor(m => m[i].children[c].value, new { @class = "form-check-input" })
@Model[i].children[c].title
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
}
</div>
</div>
}
}
<button type="submit">Save</button>
</form>
答案 0 :(得分:1)
使用浏览器的开发人员工具(按F12键)检查网络中请求标头的表单数据,问题在于模型绑定的一致性,请尝试注释掉以下代码行:
@Html.HiddenFor(m => m[i].children)
@Html.HiddenFor(m => m[i].children[c].children)