我是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类的属性。
请帮助我解决此问题。