2

我有一种情况,我正在尝试使用 Web 界面重新创建一种记录纸质问卷表格的方法。

我有一组我认为适合该目的的数据库表,但我正在努力寻找一种解决方案来创建允许用户管理答案的编辑视图。

首先我的表结构如下所示: 用于存储问题和答案的数据库结构

我省略了数据库的其余部分,因为它与手头的问题并不真正相关。

基本上,我有不同的评估,它们有一个表格类型。表单类型有一组与之关联的问题。一个问题具有与其相关联的各种数据,即答案的预期格式,可以是文本、值、单选或多选。最后有一个表格来记录每个问题的答案。如果一个问题是多项选择,则此处可能有多个条目。

我已经到了这样的阶段,我意识到我需要在渲染时创建一组答案并显示一个合适的编辑器。我需要编辑器考虑格式,如果它是多选或单选显示下拉或复选框数组。

这就是我的智商让我失望的地方!

我正在进行的代码如下所示:

首先,我有一个简单的类来存储视图模型的问题和答案的所有细节。

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,它可以为每个问题提供答案。我的问题是我不知道最好的方法:

  • A - 以可管理的方式呈现对象列表
  • B - 显示下拉列表或复选框数组

我是否走错了方向?有没有更简单的方法?我是否过度考虑了解决方案?

感谢您的时间,并为类似问题的文章道歉。

4

0 回答 0