Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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# 使用mvc4视图到控制器处理嵌套集合_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 使用mvc4视图到控制器处理嵌套集合

C# 使用mvc4视图到控制器处理嵌套集合,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我为一个我认为应该简单的概念奋斗了几个小时。我有一个模型,它本质上是一个包含一系列问题的测验,而这些问题又有一系列答案。以下是我的模型示例(简化): 我已经尝试了很多不同的建议。直接绑定到模型中的单个值非常容易,我甚至可以让我的pQuizModel在视图中看到正确的隐藏部分。但是模型中没有其他东西会被填充,我也不知道为什么\ 编辑:为了澄清我的问题,视图很好,但控制器在pQuizModel参数中没有收到任何值。我没有正确的绑定设置,需要一些帮助。问题不在于初始页面的Razor呈现,而是结果帖子上

我为一个我认为应该简单的概念奋斗了几个小时。我有一个模型,它本质上是一个包含一系列问题的测验,而这些问题又有一系列答案。以下是我的模型示例(简化):

我已经尝试了很多不同的建议。直接绑定到模型中的单个值非常容易,我甚至可以让我的pQuizModel在视图中看到正确的隐藏部分。但是模型中没有其他东西会被填充,我也不知道为什么\


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

问题不在于初始页面的Razor呈现,而是结果帖子上的模型绑定器(在他们按下按钮后)。模型绑定器对如何将ID映射到嵌套项进行了某些假设。因为在形成Razor代码时没有遵循约定,所以它没有填充方法的输入属性。请参阅类似示例。

那么问题出在哪里??是您的视图填充不正确还是什么?视图填充得很完美。挑战在于,当用户提交答案时,控制器的pQuizModel根本没有填充。正如我所说,它填充的唯一内容是pQuizModel.Id,因为我使用视图中的隐藏字段进行测试。绑定到单个属性很简单,嵌套不多。你的意思是,当你提交表单时,你在pQuizModel隐藏字段中没有值,对吗?我猜你不会在每次使用相同id在DOM中呈现pQuizModel隐藏字段时都得到值bcs。所以你需要做的是提供像这样的唯一id-
@Html.hidden(“id”,Model.id,new{Id=“pQuizModel”+Model.Id})
。试试看。请发布你的pQuizModel。
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();
}