.net中mvc问卷制作

来源:互联网 发布:c语言能够做什么 编辑:程序博客网 时间:2024/06/05 11:31

            在去年这个时候有一个专业老师教我们asp.net,这个老师没有用课本ppt来教授,而是用一个考试系统为引子。一步一步的搭建这个系统,告诉我们软件工程,编程的思想和各种知识。

       很到高大上,老师给我们演示,这个考试系统的自动抽题,自动判分。感觉可以收获很多很多,但是讲到添加用户这,这门课就结束了。还没有讲到题目的显示呢。

       最近接到了一个思修问卷的项目,怎么做题目的显示呢?题目类型有三种,单选、多选、填空。当时感觉蒙蒙的,这个怎么做?后来看了看发布的系统和积分问卷的写法和数据库的数据。明白了大概的思路。

      首先看一看关于题的数据库。


     在来看一看,选项的id。


      选项中的A,B,C在数据库中都已经添加好了,现在需要做的就显示到页面中。(每一道题要和对应的选项连接)

      在d层中一个数据一个数据的连接,类型表连着问题表,问题表连着选项表。

    List<examinationModel> examinationreally = new List<examinationModel>();  //题库包            var exam = (from qte in dbcontext.T_QuesType                        join qun in dbcontext.T_Question on qte.quseTypeID equals qun.quseTypeID                        join opn in dbcontext.T_Option on qun.quesID equals opn.quesID                        select new examinationModel()                        {                            questype = qte.quesType,     //问题类型                            quesTypeID = qun.quseTypeID, //类型id                            quesID = qun.quesID,                            quesContent = qun.quesContent,                            optionID = opn.optionID,                            optionContent = opn.optionContent                        }                );            
     因为在数据库中添加的时候,不能确定单选题,多选题,填空的顺序所以要在B层规划好顺序, B层怎么写的呢1?

     到底所以的题的记录,然后在重新定义一个list,首先判断是否是单选,然后添加把所有的单选添加完在判断多选题,然后在全部添加多选,最后再添加填空。

   

  //传递返回到con            QuestionDAL quDAL = new QuestionDAL();            List<examinationModel> bridge = new List<examinationModel>();//所有的            bridge = quDAL.getexamination();            List<examinationModel> bridgefirst = new List<examinationModel>();//所有的单选题            //这样的目的就是为了整个卷面都按照单选,多选,填空这个顺序走下来            for (int i = 0; i < bridge.Count; i++)            {                if (bridge[i].questype=="单选")                {                    bridgefirst.Add(bridge[i]);                }            }            for (int i = 0; i < bridge.Count; i++)            {                if (bridge[i].questype == "多选")                {                    bridgefirst.Add(bridge[i]);                }            }            for (int i = 0; i < bridge.Count; i++)            {                if (bridge[i].questype == "填空")                {                    bridgefirst.Add(bridge[i]);                }            }            for (int i = 0; i < bridge.Count; i++)            {                if (bridge[i].questype != "填空" && bridge[i].questype != "多选" && bridge[i].questype != "单选")                {                    bridgefirst.Add(bridge[i]);                }            }            return bridgefirst;

    因为所有的选项都跟着向对应的问题,所以就有进行缩减,只有一个问题然后在跟多个选项。一个问题连着很多选项其中就是添加html代码进行简单的布局。把整个问卷化成一个字符串然后传到页面。

   

      public ActionResult Index()        {            //页面初始化得到答题的页面            //建立一个新的数据包含问题                       //建立一个新的数据包含选项            List<examinationModel> questionoption = new List<examinationModel>();            QuestionBLL queBLL = new QuestionBLL();            List<examinationModel> examinationreally = queBLL.getexamination();            string ok = ""; //各种的答案的字符连接            //string oksum = ""; //各种的答案的字符连接            if (examinationreally.Count==0)            {                ok = "<span>管理员正在配题</span>";            }            else            {                //现在的情况是记录表阶乘,先得到各个问题,在根据问题找选项                //所有数据大循环                //现在得到了所有的问题,唯一                questionsum = (from exam in examinationreally                               group exam by exam.quesID into tt                               select new examinationModel()                               {                                   quesID = tt.Select(p => p.quesID).First(),                                   quesContent = tt.Select(y => y.quesContent).First(),                                   questype=tt.Select(p=>p.questype).First()                               }).ToList();                               for (int i = 0; i < questionsum.Count; i++)  //某个具体的题的内容                {                    int k= i + 1;  //题号可以从1                    ok += k + "、" + questionsum[i].quesContent;                    ok += "<br><br>";                                        for (int j = 0; j < examinationreally.Count; j++)                    {                        if (questionsum[i].quesID==examinationreally[j].quesID)                        {                                                      //首先进行选择题的判断                            if (questionsum[i].questype=="单选")                               {                                ok += "<input type=\"radio\" \" name=\"single" + k + "\" value=\"" + questionsum[i].quesID + "%" + examinationreally[j].optionID + "\" /> ";     //问题id和答案id都有                                ok +=  examinationreally[j].optionContent;                                ok += "<br><br>";                            }                           //第二判断多选题                            if (questionsum[i].questype=="多选")                            {                                ok += "<input type=\"checkbox\" \" name=\"checkbox" + k + "\" value=\"" + questionsum[i].quesID + "%" + examinationreally[j].optionID + "\" /> ";  //问题id和答案id都有                                ok +=  examinationreally[j].optionContent;                                ok += "<br><br>";                            }                            //第三判断填空题                            if (questionsum[i].questype=="填空")                            {                                ok += " <textarea rows='3' cols='20' maxlength='100' name=\"fill" + k + "\" style=\"width:600px;height:110px;\" /></textarea>";                                                              ok += "<br>";                            }                        }                    }                                    }            }            ViewBag.Message = ok;            return View("Question");        }

   

       就是这种效果,谢谢大家的建议。


   


   


            

原创粉丝点击