使用控制器的mvc4视图处理嵌套集合

本文关键字:处理 嵌套 集合 视图 mvc4 控制器 | 更新日期: 2023-09-27 18:22:08

我已经为一个我觉得应该很简单的概念挣扎了几个小时。我有一个模型,本质上是一个有问题集合的测验,这个集合有一个答案集合。以下是我的模型(简化)示例:

public class QuizModel
{
    public List<Question> Questions { get; set; }
}
public class Question
{
    public string TheQuestion { get; set; }
    public List<Answer> Answers { get; set; }
}
public class Answer
{
    public string Value { get; set; }
}

还有麻烦的部分,我认为:

@using (Html.BeginForm("SubmitQuiz", "Quiz", FormMethod.Post, new { role = "form" }))
{
    <ol>
        @{
            @Html.Hidden("Id", Model.Id, new { Id="pQuizModel"})
            for (int vQIndex = 0; vQIndex < Model.Questions.Count; vQIndex++)
            {
                <li>
                    @Model.Questions.ElementAt(vQIndex).Question
                    <ul class="list-unstyled">
                        @{
                            for (int vAIndex = 0; vAIndex < Model.Questions.ElementAt(vQIndex).Answers.Count; vAIndex++)
                            {
                                <li>@Html.RadioButtonFor(pModel => pModel.Questions.ElementAt(vQIndex).SelectedAnswer, Model.Questions.ElementAt(vQIndex).Answers.ElementAt(vAIndex).Value) @Model.Questions.ElementAt(vQIndex).Answers.ElementAt(vAIndex).Value</li>
                                //<li>@Html.RadioButton(Model.Questions.ElementAt(vQIndex).Id.ToString() + ":" + Model.Questions.ElementAt(vQIndex).Answers.ElementAt(vAIndex).Id, Model.Questions.ElementAt(vQIndex).Answers.ElementAt(vAIndex).Id) 
                                //    @Model.Questions.ElementAt(vQIndex).Answers.ElementAt(vAIndex).Value</li>
                            }
                        }
                    </ul>
                </li>            
            }
        }
    </ol>    
    <button type="submit" class="btn btn-default">Submit</button>                 
}

我的控制器,只是试着调试它,并确保模型正确填写:

public ActionResult SubmitQuiz(QuizModel pQuizModel)
{
    return View();
}

对于我的观点,我确实尝试了很多不同的建议。直接绑定到模型中的单个值非常容易,我甚至可以让我的pQuizModel拥有你在视图中看到的正确的隐藏部分。但模型中没有其他内容被填充,我不知道为什么。''

编辑:为了澄清我的问题,视图很好,但控制器没有接收到pQuizModel参数中的任何值。我没有正确的绑定设置,需要一些帮助。

使用控制器的mvc4视图处理嵌套集合

问题不在于初始页面的Razor呈现,而在于生成的POST上的模型绑定器(在他们按下按钮之后)。模型绑定器对如何将id映射到嵌套项进行了某些假设。因为在形成Razor代码时没有遵循约定,所以它没有填充方法的输入属性。看见http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx对于类似的例子。