Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在asp.net MVC 4中呈现问卷答案的复杂编辑视图_Asp.net_Asp.net Mvc - Fatal编程技术网

在asp.net MVC 4中呈现问卷答案的复杂编辑视图

在asp.net MVC 4中呈现问卷答案的复杂编辑视图,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我有一种情况,我试图重新创建一种方法,使用web界面记录纸质问卷表 我有一组数据库表,我相信它们适合这个目的,但我正在努力找到一个解决方案来创建编辑视图,允许用户管理答案 首先,我的表结构如下所示: 我省略了数据库的其余部分,因为它实际上与手头的问题无关 基本上,我有不同的评估,有一个表格类型。表单类型有一组与之关联的问题。一个问题有各种与之相关的数据,即答案的预期格式,可以是文本、值、单选或多选。最后有一个表格记录每个问题的答案。如果是多项选择题,则此处可能有多个条目 我已经到了这样一个阶段

我有一种情况,我试图重新创建一种方法,使用web界面记录纸质问卷表

我有一组数据库表,我相信它们适合这个目的,但我正在努力找到一个解决方案来创建编辑视图,允许用户管理答案

首先,我的表结构如下所示:

我省略了数据库的其余部分,因为它实际上与手头的问题无关

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

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

这就是我的智慧让我失望的地方

我的“正在工作”代码如下所示:

首先,我有一个简单的类来存储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()
    {

    }
}
公共类初始评估回答
{
public int QuestionID{get;set;}
公共字符串问题{get;set;}
公共字符串格式{get;set;}
公共IEnumerable可能答案{get;set;}
//不同的答案类型
公共bool AnswerYesNo{get;set;}
公共int?应答id{get;set;}
公共字符串应答文本{get;set;}
公共int?应答值{get;set;}
公共字符串部分{get;set;}
公众初步评估回答(IEnumbers答案)
{
可能答案=答案;
}
公众初步评估回答()
{
}
}
然后我有了一个repo方法,可以创建或获取表单的现有答案

var form=Context.Forms.FirstOrDefault(p=>p.FormName==“初始评估”);
var initialAnswers=新列表();
if(form!=null)
{
变量问题=表单。问题表单;
foreach(问题中的var问题)
{
var a=新的初始评估回答();
a、 QuestionID=question.QuestionID;
a、 问题=Question.Question.QuestionText;
a、 QuestionSection=question.question.Section;
a、 格式=question.question.QuestionAnswerFormat.Format;
a、 可能答案=question.question.question可能答案;
var answer=ia.InitialAssessmentAnswers.FirstOrDefault(p=>p.QuestionID==question.QuestionID);
如果(答案==null)
{
//在此处设置一些默认值
}
其他的
{
a、 AnswerID=answer.id;
a、 AnswerValue=answer.AnswerValue;
}
}
}
所以从理论上讲,我最终应该得到一个Viewmodel,它能为每个问题提供答案。我的问题是我不知道最好的方法:

  • A-以可管理的方式呈现对象列表
  • B-显示下拉列表或复选框数组
我是不是走错方向了?有没有更简单的方法?我是不是想得太多了


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

如果您可以在视图中对您的问题/答案类型进行分组(文本、是/否、多回音等),那么使用视图模型和每个类型的
editor模板就可以相对简单地解决这一问题。我想你现在已经解决了?
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;
                }
            }
        }