为每个对象创建一个复选框
本文关键字:一个 复选框 创建 对象 | 更新日期: 2023-09-27 18:22:07
我正在创建一个小型网站,允许用户创建问题和考试(以及参加这些考试)。面临创建examview的问题。必须允许用户检查应添加到考试中的任何问题。
使用以下操作创建视图,该视图通过ViewBag:中的问题
public ActionResult Create()
{
QuestionaireDbContext db = new QuestionaireDbContext();
ViewBag.Questions = db.Questions;
return View();
}
在我看来,我可以调用ViewBag.Questions,并(应该能够?)使用它们为每个Questions创建复选框。
我尝试过使用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; }
}
您需要创建视图模型来表示要绑定的内容。一种可能的解决方案可能是
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; }
}
在Create方法中,初始化并填充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
在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
操作的模型