向具有ICollection <generic>对象的视图显示对象列表作为其项目之一

时间:2017-03-05 07:29:09

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

我是MVC的新手,我正在开发一个小类项目,我必须在从数据库中获取数据后生成一个多选题。

我的问题出现在Question表中,其中有questionId和questionText列,我有一个选项表,我保存了问题的选择,这个表有choiceId,questionId和choiceText列(每个问题可以有任意数量的选项,所以我在单独的表中保存选择。)

我的模特:

Question Model:

namespace OnlineExamination.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Question
    {
        public Question()
        {
            this.Choices = new HashSet<Choice>();
            this.Exams = new HashSet<Exam>();
        }

        public int questionId { get; set; }
        public string questionText { get; set; }

        public virtual ICollection<Choice> Choices { get; set; }
        public virtual ICollection<Exam> Exams { get; set; }
    }
}

我的控制员:

public ActionResult Exam()
        {
            Question ques = new Question();

            using (OnlineExamEntities db = new OnlineExamEntities())
            {

                ques.questionText = db.Questions.Where(z => z.questionId == 1000).Select(z => z.questionText).SingleOrDefault();

               var query = (from p in db.Choices
                                where p.questionId == 1000
                                select new
                                {
                                    choiceId = p.choiceId,

                                    choiceText = p.choiceText,

                                    isCorrect = p.isCorrect
                                }).ToList();

                   ques.Choices = query.Select(x => new Choice
                                {
                                    choiceId = x.choiceId,
                                    choiceText = x.choiceText,
                                    isCorrect = x.isCorrect
                                }).ToList();

                return View(ques);


            }
        }

我可以使用上面的控制器从表中获取数据。 我在视图中显示ICollection对象及其属性时遇到了麻烦。

我的观点:

@model OnlineExamination.Models.Question


@{
    ViewBag.Title = "Exam";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

        @Html.Label(ViewData["qText"].ToString());

    <ul>
        <li>

           @for(int i =0 ; i< Model.Choices.Count ;i++ ){

               Html.HiddenFor(m => m.Choices[i]);

            }

         </li>

    </ul>
}

我可以使用&#34;将问题文本添加到视图中@ Html.Label(Model.questionText.ToString());&#34;

我正在尝试使用类似的代码块进行选择,但这种代码块无效,

我用来显示选项的代码:  @ Html.Label(Model.Choices [i])无效。我无法访问Choice类的属性。

请帮助我解决此问题。

0 个答案:

没有答案