我有一种情况,我试图使用网络界面重新创建一种记录纸质问卷表格的方法。
我有一组数据库表格,我认为这些表格适用于此目的,但我很难找到创建编辑视图的解决方案,以便用户管理答案。
从我的表结构开始,如下所示:
我省略了数据库的其余部分,因为它与手头的问题无关。
基本上,我有不同的评估,其中有一个表格类型。表单类型有一组与之关联的问题。一个问题有与之相关的各种数据,即答案的预期格式,可以是文本,值,单个或多个选择。最后,有一个表格记录每个问题的答案。如果一个问题是多项选择,那么这里可能有多个条目。
我已经到了舞台,我意识到我需要在渲染时创建一组Answers并显示一个合适的编辑器。我需要编辑器考虑格式,如果它是多项选择或单选项显示下拉列表或复选框数组。
这是我的情报让我失望的地方!
我的进度代码如下:
首先,我有一个简单的类来存储viewmodel的问题和答案的所有细节。
public class InitialAssessmentAnswerDTO
{
public int QuestionID { get; set; }
public string Question { get; set; }
public string Format { get; set; }
public IEnumerable<QuestionPossibleAnswer> PossibleAnswers { get; set; }
//different answer types
public bool AnswerYesNo { get; set; }
public int? AnswerID { get; set; }
public string AnswerText { get; set; }
public int? AnswerValue { get; set; }
public string QuestionSection { get; set; }
public InitialAssessmentAnswerDTO(IEnumerable<QuestionPossibleAnswer> answers)
{
PossibleAnswers = answers;
}
public InitialAssessmentAnswerDTO()
{
}
}
然后我有一个repo方法,可以为表单创建或获取现有答案。
...
var form = Context.Forms.FirstOrDefault(p => p.FormName == "Initial Assessment");
var initialAnswers = new List<InitialAssessmentAnswerDTO>();
if (form != null)
{
var questions = form.QuestionsForForms;
foreach (var question in questions)
{
var a = new InitialAssessmentAnswerDTO();
a.QuestionID = question.QuestionID;
a.Question = question.Question.QuestionText;
a.QuestionSection = question.Question.Section;
a.Format = question.Question.QuestionAnswerFormat.Format;
a.PossibleAnswers = question.Question.QuestionPossibleAnswers;
var answer = ia.InitialAssessmentAnswers.FirstOrDefault(p => p.QuestionID == question.QuestionID);
if (answer == null)
{
//set some default values here
}
else
{
a.AnswerID = answer.id;
a.AnswerValue = answer.AnswerValue;
}
}
}
所以从理论上讲,我最终应该得到一个Viewmodel,它可以为每个问题提供答案。我的问题是我不知道最好的方法:
我是否朝这个方向走错了路?有没有更简单的方法?我是否过度思考解决方案?
感谢你的时间和对问题的道歉。