使用默认模型绑定将嵌套集合从视图发布到后期控制器

时间:2014-06-26 11:35:56

标签: c# asp.net asp.net-mvc-4 razor model-binding

我正在构建一个asp.net mvc Web应用程序。我有以下设置,以便我的应用程序可以通过多项选择答案向一个人提问题。

public class NewPerson
{
   public List <Question> Question {get; set;}
   // and other properties
 }

public class Question
{
    public int QuestionId{get; set;}
    public string QuestionText {get; set;}
    public List<Answer> Answers {get; set;} //list of multi-choice answers
}

public class Answer
{
     public int Answerid{get; set;}
     public string AnswerText {get; set;}             
 }

在我的控制器中,我有一个newPerson的实例,其中填充了问题和答案。然后将其发送到视图。我希望我的视图将此数据发送回帖子控制器。我试图通过使用默认模型绑定器来做到这一点。我试图使用建议的方法 http://www.c-sharpcorner.com/UploadFile/pmfawas/Asp-Net-mvc-how-to-post-a-collection/

在我的剃刀视图中,我有

@model MyProject.ViewModels.NewPerson

以下代码允许模型绑定器绑定属性QuestionId和QuestionText

for(int i = 0; i < Model.Questions.Count; i++)
    {
        @Html.HiddenFor(modelItem => Model.Questions[i].QuestionId)
        @Html.HiddenFor(modelItem => Model.Questions[i].QuestionText)
    }

我想为答案列表做类似的事情,但我找不到办法。如何做任何帮助将非常感激!

1 个答案:

答案 0 :(得分:3)

您需要嵌套for循环才能访问Questions[i].Answers[m]

   @for (int i = 0; i < Model.Questions.Count(); i++)
   {
      @Html.HiddenFor(modelItem => Model.Questions[i].QuestionText)    

       for (int m = 0; m < Model.Question[i].Answers.Count(); m++)
       {
          @Html.HiddenFor(modelItem => Model.Questions[i].Answers[m].AnswerText)
       }
   }

如果有人对如何填充模型有疑问,请执行此操作

NewPerson model = new NewPerson();

model.Questions = (insert LinQ Query).ToList();

foreach(var item in model.Questions)
{
   item.Answers = (insert LinQ Query).ToList();
}