如何处理强类型的MVC3视图,其中模型具有嵌套集合?

时间:2011-06-22 01:29:07

标签: asp.net-mvc-3 razor radiobuttonlist

我的模型有一系列“问题”。每个问题都有一个“PossibleAnswers”集合。可能的答案对象具有isAnswer属性,该属性应绑定到代表问题的所选单选按钮(在每个问题的组中)。

我是MVC的新手,并且真的不确定如何构建视图,以便发布的模型将具有针对每个问题的可能收集的集合,其中一个对象具有isAnswer属性设置为true,基于来自相关的单选按钮组。

现在,视图应为每个问题构建一个单选按钮组/列表,其中可能的问题集合表示与问题相关的单选按钮选项。我可以在剃刀中做嵌套循环吗?你使用偏见?当我发布它时,MVC如何知道如何根据视图重建模型?

2 个答案:

答案 0 :(得分:1)

实际上非常简单。棘手的部分是使用索引器

    namespace MvcApplication2.Controllers
{
    public class QuizModel
    {
        public IList<QuestionModel> Questions { get; set; }
    }
    public class QuestionModel
    {
        public IList<AnswerModel> PossibleAnswers { get; set; }       
    }
    public class AnswerModel
    {
        public bool IsAnswer { get; set; }
    }


    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View(new QuizModel
                            {
                                Questions = Enumerable.Repeat(
                                    new QuestionModel
                                        {
                                            PossibleAnswers = Enumerable.Repeat(new AnswerModel(), 3).ToList()
                                        }, 2).ToList()
                            });
        }
        [HttpPost]
        public ActionResult Index(QuizModel model)
        {
            return View(model);
        }
    }}

然后你的观点

@model MvcApplication2.Controllers.QuizModel
@{
    View.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
    Index</h2>
    @using (Html.BeginForm())
    {
for (int i = 0; i < Model.Questions.Count; i++)
{
    for (int j = 0; j < Model.Questions[i].PossibleAnswers.Count; j++)
    {
    <div>
        @Html.EditorFor(c => Model.Questions[i].PossibleAnswers[j].IsAnswer)
    </div>
    }
}
<input type="submit" value="Submit" />
    }

答案 1 :(得分:0)

你需要的是你的View中的“RadioButtonListFor”,这是一个很好的例子here