如果有更好的方法来构建我正在为客户重写的面试页面,我正在尝试解决问题。我正在使用MVC 5和Entity Framework 6重写该站点。
目前,数据库有一个表格,其中包含名为question1,question2等的列......直到问题23.当用户完成面试问题时,会插入一个新行,其中包含每个问题的答案或者他们拥有的问题。选择回答。这似乎是错误的,因为问题文本被硬编码到视图中,因此如果问题被更新,他们当前更改视图中的文本或者如果它被删除,他们从视图中删除问题并留下数据库中的内容!
我希望能够重写它,以便他们可以在新的管理面板中管理问题,这样他们就可以在后端添加/编辑/删除问题而无需编辑视图或在db表中留下旧问题。
我在考虑如下两个表结构(使用代码优先):
InterviewQuestions - Id(int) - 问题(字符串)
InterviewAnswers - Id(int) - UserId(string) - QuestionId(int) - 答案(字符串)
视图模型 - 清单 ( QuestionId - 题 - AnswerId - 回答)
但我正在努力的是如何展示面试表格。我可以迭代视图模型中的所有问题并显示问题和答案的文本框。但是,当用户填写答案并点击保存时,我将如何知道哪个答案属于哪个问题?我希望这是有道理的,因为我似乎无法想出一个更好的方法来实现它!
感谢您的任何建议
答案 0 :(得分:0)
我会创建另一个viewModel,它可以帮助我将问题与答案联系起来。这样。
<强>视图模型强>:
public class InterviewViewModel
{
public List<QuestionViewModel> questionsViewModel {get;set;}
}
public class QuestionViewModel
{
public int QuestionId{get;set;}
public string Question{get;set;}
public string Answer{get;set;}
}
控制器GET :在这里,您可以使用从数据库中获得的问题填充viewModel列表。
public Create()
{
var viewModel = new InterviewViewModel();
var questionListFromDB = context.InterviewQuestions.All().ToList();//Get your questions
foreach(var question from questionListFromDB)
{
var questionVm = new QuestionViewModel();
questionVm.QuestionId = question.Id;
questionVm.Question = question.Question;
viewModel.questionsViewModel.Add(questionVm);
}
return View(viewModel);
}
查看:在视图中,您只需公开问题并获得答案
@foreach(var question in model.questionsViewModel)
{
//text with the question
//text for the answer
}
控制器POST :在控制器发布操作中,您通过视图模型的列表进行迭代,并为每个回答的问题创建一个新答案:
[HttpPost]
public Create(InterviewViewModel model)
{
foreach(var question in model.questionsViewModel)
{
var answerToCreate = new InterviewAnswers();
answerToCreate.QuestionId = question.Id;
answerToCreate.Answer= question.Answer;
//here you save your answer.
}
}
P.S:您还可以向视图发送QuestionViewModel
的列表,但我更喜欢将我的视图发送到其他内容中的一个对象。也许您稍后需要其他东西用于视图,如果它只是一个对象,则更容易,您只需向该对象添加一个新字段。让我们知道;)