.net中mvc问卷制作

本文介绍了如何在ASP.NET MVC环境下制作问卷,通过数据库设计和数据连接展示不同类型的题目,包括单选、多选和填空。首先,分析题库数据库结构,接着通过在数据层连接不同类型题目与其选项,最后在前端显示。通过逐步讲解实现了一个基本的问卷系统。
摘要由CSDN通过智能技术生成

            在去年这个时候有一个专业老师教我们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");
        }

   

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


   


   


            

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值