将复选框组作为 Dictionary<int, Dictionary<int, bool>> 提交给控制器

Submit groups of checkboxes as Dictionary<int, Dictionary<int, bool>> to controller

我想将复选框组提交为字典词典:

控制器:

[HttpPost]
public ActionResult Page1(Dictionary<int, Dictionary<int, bool>> multiChoiceAnswers)
{
    //...
}

查看,第一次尝试:

foreach (var q in questionGroup.Questions)
{
    <h5>@q.Text</h5>
    foreach (var option in q.MultiChoiceOptions)
    {
        <label><input type="checkbox" name="multiChoiceAnswers[@q.Id][@option.Id]" value="true" />@option.Name</label><br />
        <input type="hidden" name="multiChoiceAnswers[@q.Id][@option.Id]" value="false" />        
    }
}

查看,第二次尝试:

var i = 0;
foreach (var q in questionGroup.Questions)
{
    <h5>@q.Text</h5>
    <input type="hidden" name="multiChoiceAnswers[@i].Key" value="@q.Id" />
    var j = 0;
    foreach (var option in q.MultiChoiceOptions)
    {
        <input type="hidden" name="multiChoiceAnswers[@i][@j].Key" value="@option.Id" />
        <label><input type="checkbox" name="multiChoiceAnswers[@i][@j].Value" value="true" />@option.Name</label><br />
        <input type="hidden" name="multiChoiceAnswers[@i][@j].Value" value="false" />
        j++;
    }                
    i++;
}

结果:字典为空。为什么?

有效!

控制器:

[HttpPost]
public ActionResult Page1(Dictionary<int, Dictionary<int, bool>> multiChoiceAnswers)
{
    //...
}

查看:

var i = 0;
foreach (var q in questionGroup.Questions)
{
    <h5>@q.Text</h5>
    <input type="hidden" name="multiChoiceAnswers[@i].Key" value="@q.Id" />
    var j = 0;
    foreach (var option in q.MultiChoiceOptions)
    {
        <input type="hidden" name="multiChoiceAnswers[@i].Value[@j].Key" value="@option.Id" />
        <label><input type="checkbox" name="multiChoiceAnswers[@i].Value[@j].Value" value="true">@option.Name</label><br />
        <input type="hidden" name="multiChoiceAnswers[@i].Value[@j].Value" value="false" />
        j++;
    }                
    i++;
}