我正在创建一个小网站,允许用户创建问题和考试(并参加考试)。面对Create-examview的问题。必须允许用户检查应添加到考试中的任何问题。
使用以下操作创建视图,该视图传递ViewBag中的问题:
public ActionResult Create()
{
QuestionaireDbContext db = new QuestionaireDbContext();
ViewBag.Questions = db.Questions;
return View();
}
在我看来,我可以调用ViewBag.Questions并(应该能够?)使用这些来为每个问题创建复选框。
我尝试过使用extesionmethod来获取HtmlHelper,CheckBoxList,这是我通过NuGet获得的。但是Html.CheckBoxList似乎没有被选中。我尝试按照他们的文档中的建议添加使用但是也没有用。
如何为每个问题创建一个复选框,并允许用户选择其中的变量?
我的考试和问题模型供参考:
public class Exam
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreationDate { get; set; }
public ICollection<Question> Questions { get; set; }
}
public class Question
{
public enum Answers
{
A,
B,
C,
D
}
public int Id { get; set; }
public string Name { get; set; }
public string AnswerA { get; set; }
public string AnswerB { get; set; }
public string AnswerC { get; set; }
public string AnswerD { get; set; }
public Answers Correct { get; set; }
}
答案 0 :(得分:0)
您需要创建视图模型来表示要绑定的内容。一种可能的解决方案可能是
public class ExamVM
{
public int ID { get; set; }
public string Name { get; set; }
public List<QuestionVM> Questions { get; set; }
}
public class QuestionVM
{
public int ID { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; }
}
在您创建方法中,初始化并填充ExamVM详细信息,包括可能的问题集合,然后在视图中
@model YourAssembly.ExamVM
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.ID)
@Html.DisplayFor(m => m.Name)
for (int i = 0; i < Model.Questions; i++)
{
@Html.HiddenFor(m => m.Questions[i].ID)
@Html.CheckBoxFor(m => m.Questions[i].IsSelected)
@Html.DisplayFor(m => m.Questions[i].Name)
}
<input type="submit" value="Save" />
}
发布方法
[HttpPost]
public ActionResult Create(ExamVM model)
{
foreach(QuestionVM q in model.Questions)
{
if (q.IsSelected)
{
// Save the value of exam.ID and question ID to the database
答案 1 :(得分:0)
在Views / Shared文件夹中创建一个名为EditorTemplates
的文件夹。
创建一个名为_QuestionEditor的新空视图,并添加以下代码。
@model Question
@Html.HiddenFor(model => model.Id)
@Html.DisplayFor(model => model.Name)
//use DisplayFor or LabelFor accordingly
@Html.CheckboxFor(model => true, Model.AnswerA)
@Html.CheckboxFor(model => true, Model.AnswerB)
@Html.CheckboxFor(model => true, Model.AnswerC)
@Html.CheckboxFor(model => true, Model.AnswerD)
现在在主视图中使用如下
@foreach(var question in ViewBag.Questions){
@Html.EditorFor(item => question)
//you can specify the template name i.e `"_QuestionEditor"` as the second parameter
//if you have more than one editor template for the same type
}
这没有考虑您提交数据的方式,因为您没有提供任何代码或用于将数据恢复到post
操作的模型