Как обработать строго типизированное представление MVC3, где модель имеет вложенные коллекции? - PullRequest
1 голос
/ 22 июня 2011

У меня есть модель, в которой есть «Вопросы».Каждый вопрос имеет коллекцию "возможных ответов".Возможные объекты ответа имеют свойство isAnswer, которое должно быть привязано к выбранному переключателю (в группе для каждого вопроса), представляющему вопрос.

Я новичок в MVC и действительно не уверен, как построить представлениетак что опубликованная модель будет иметь коллекцию возможных ответов на каждый вопрос с одним из объектов, для свойства isAnswer которого установлено значение true, на основе выбора из соответствующей группы переключателей.

Сейчас представление должно быть построеногруппа / список переключателей для каждого вопроса с возможным набором ответов, представляющим выбор переключателя, относящегося к вопросу.Могу ли я сделать вложенный цикл в бритве?вы используете частичные?как MVC знает, как перестроить модель на основе представления, когда я публикую ее ??

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Это на самом деле очень просто.Сложнее всего использовать индексаторы

    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" />
    }
0 голосов
/ 22 июня 2011

Вам нужно «RadioButtonListFor» в вашем View, и это хороший пример здесь

...