ASP.NET制作调查问卷

简介:
【项目需求】
	最近几天,一直在做考试系统的维护。这一次的考试,思政部的老师提出了一个需求,希望在学生考试前填写一个关于本学期本学科的几个问题调查,以便更加了解学生情况。调查问卷共有三种题型:单选、多选和填空。我负责的是多选题型。
【项目概要】
	ASP.NET WebForm开发框架,简单的三层开发。开发环境VS2012,SQL Server2008R2数据库。
【项目开发】
	我们决定在已有的基础评教系统中增加一个新的页面,也就是整个调查问卷的内容。因为整个调查问卷只有四道多选题,所以,我选择把题目直接写在前台页面上,利用复选框按钮,便可实现学生进行多项选择。
	前台第一个多选题代码如下:

<div>12、有些思政课老师讲课缺乏吸引力,你认为主要原因是(可多选)(      )</div>
            <br/>
            <br/>
            <input name="ans12" type="checkbox" id="Checkbox0" value="A.理论功底欠缺,缺乏必要的广度和深度">A.理论功底欠缺,缺乏必要的广度和深度
            <br/>
             <br/>
            <input name="ans12" type="checkbox" id="Checkbox1" value="B 教学方式陈旧、单一,难以激发学习兴趣">B 教学方式陈旧、单一,难以激发学习兴趣
            <br/>
            <br/>
            <input name="ans12" type="checkbox" id="Checkbox2" value="C 讲授内容与社会现实脱节,照本宣科">C 讲授内容与社会现实脱节,照本宣科
            <br/>
            <br/>
            <input name="ans12" type="checkbox" id="Checkbox3" value="D 语言表达缺乏感染力,课堂气氛沉闷">D 语言表达缺乏感染力,课堂气氛沉闷
            <br/>
            <br/>
            <input name="ans12" type="checkbox" id="Checkbox4" value="E 高高在上,过分严肃,缺乏亲近感 ">E 高高在上,过分严肃,缺乏亲近感 
            <br/>
            <br/>
            <input name="ans12" type="checkbox" id="Checkbox5" value="F这门课内容空泛、枯燥,无实际用途">F这门课内容空泛、枯燥,无实际用途
            <br/>
            <br/>
            <input name="ans12" type="checkbox" id="Checkbox6" value="G 上课仅为完成教学任务,对学生漠不关心,缺少沟通">G 上课仅为完成教学任务,对学生漠不关心,缺少沟通
            <br/>
            <br/>
	前台设计好了,多选题目也就出好了。具体效果如下:
	
	在前台,我是将一个多选题下的所有选项都定义为name值相同,而value值不同的复选框,接下来,我要做的就是获取前台每一个学生每道题下所选的项。
	js代码如下:

function isChecked() {
            
             //多选第一题                         
             var obj = document.getElementsByName('ans12');
             var s = "";
             for (var i = 0; i < obj.length; i++) {
                 if (obj[i].checked)
                     s += obj[i].value + ',';
             }
             document.getElementById("TextBox1").value = s;
           
             //多选第二题
             var obj = document.getElementsByName('ans13');
             var s = "";
             for (var i = 0; i < obj.length; i++) {
                 if (obj[i].checked)
                     s += obj[i].value + ',';
             }
             document.getElementById("TextBox2").value = s;
            
             //多选第三题
             var obj = document.getElementsByName('ans14');
             var s = "";
             for (var i = 0; i < obj.length; i++) {
                 if (obj[i].checked)
                     s += obj[i].value + ',';
             }
             document.getElementById("TextBox3").value = s;
            
             //多选第四题
             var obj = document.getElementsByName('ans15');
             var s = "";
             for (var i = 0; i < obj.length; i++) {
                 if (obj[i].checked)
                     s += obj[i].value + ',';
             }
             document.getElementById("TextBox4").value = s;
            
         }
	通过js,便可以按名称获取每道多选题下的选中值,将获取到的值赋值给对应的隐藏文本框中,便于将值存入到数据库中进行查询。
	最后的工作,便是需要将值存入到数据库中。这一次存入数据库,用的方式是创建和数据库中对应的DataSet和DataTable,直接在DataSet下添加DataTable。
	D层数据访问层代码:

public Boolean AddCheckAnswer(DataSet dsCheckAnswer, SqlConnection sqlCon, SqlTransaction sqlTran)
        {
            //定义布尔型标记变量,
            //添加多选题答案信息
            Boolean flagAddCheckAnswer;

            //调用sqlHelper的"批量导入datatable表"的方法
            flagAddCheckAnswer = sqlHelper.InsertTable(dsCheckAnswer.Tables["dt_CheckAnswer"], "T_CheckAnswer", dsCheckAnswer.Tables["dt_CheckAnswer"].Columns, sqlCon, sqlTran);

            //返回结果
            return (flagAddCheckAnswer);
        }
	B层业务逻辑层代码:

public Boolean AddCheckAnswer(DataSet dsCheckAnswer)
        
        {
            checkchoiceDAL = new CheckChoiceDAL(); //实例化建议操作类
            SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["strConnDB"].ConnectionString);
            
            //打开连接
            sqlCon.Open();
            //定义事务
            SqlTransaction sqlTran = sqlCon.BeginTransaction(IsolationLevel.ReadCommitted);

            //用try...Catch...finally保证事务在出错时会回滚
            try 
            {
                //添加建议
                Boolean flagAddCheckAnswer = checkchoiceDAL.AddCheckAnswer(dsCheckAnswer, sqlCon, sqlTran);
                    
                    //判断判分是否成功
                if (flagAddCheckAnswer)
                    {
                        //如果都为真,提交
                        sqlTran.Commit();
                        return true;   //添加成功
                    }
                    else
                    {
                        sqlTran.Rollback();
                        return false; //添加失败
                    }
            }
            catch(Exception)
            {
                //出现异常,事物回滚
                sqlTran.Rollback();
                return false;
            }
            finally
            {
                sqlCon.Close();
                //sqlCon = null;
            }
        }
 	U层用户界面层代码:

<span style="white-space:pre">	</span>    DataSet dsCheckAnswer = new DataSet("dt_CheckAnswer");
            //手动创建一个名为“dt_CheckAnswer”的DataSet文件
            DataTable dtCheckAnswer = new DataTable("dt_CheckAnswer");

            //表内建立Column(表头)
          
            dtCheckAnswer.Columns.Add(new DataColumn("studentID", typeof(string)));
            dtCheckAnswer.Columns.Add(new DataColumn("setDateTime", typeof(DateTime)));
            dtCheckAnswer.Columns.Add(new DataColumn("isAvailable", typeof(string)));
            dtCheckAnswer.Columns.Add(new DataColumn("multFirst", typeof(string)));
            dtCheckAnswer.Columns.Add(new DataColumn("multSecond", typeof(string)));
            dtCheckAnswer.Columns.Add(new DataColumn("multThird", typeof(string)));
            dtCheckAnswer.Columns.Add(new DataColumn("multFourth", typeof(string)));
         

            #region 一条信息——胡志婷——2016年1月2日08:28:32
            if (TextBox1.Text.Trim() != "" && TextBox2.Text.Trim() != "" && TextBox3.Text.Trim() != "" && TextBox4.Text.Trim() != "")
            { //多选题答案不为空时,写入答案

                //添加新行
                DataRow drAddEvaluation = dtCheckAnswer.NewRow();//注意这边创建dt的新行的方法。指定类型是DataRow而不是TableRow,然后不用new直接的用创建的DataTable下面的NewRow方法。

                //多选题各列值            
                drAddEvaluation["StudentID"] = "2";
                //drAddEvaluation["StudentID"] = Session["StudentID"].ToString(); //学号
                drAddEvaluation["setDateTime"] = DateTime.Now;  //当前时间
                drAddEvaluation["isAvailable"] = "Y";
                drAddEvaluation["multFirst"] = TextBox1.Text; //多选第一题
                drAddEvaluation["multSecond"] = TextBox2.Text; //多选第二题
                drAddEvaluation["multThird"] = TextBox3.Text; //多选第三题
                drAddEvaluation["multFourth"] = TextBox4.Text; //多选第四题                     
                dtCheckAnswer.Rows.Add(drAddEvaluation);//将一整条数据写入表中
            }
            #endregion

            #endregion

            dsCheckAnswer.Tables.Add(dtCheckAnswer);//写入多选题答案
	这样,便实现了将学生的多选题答案存入到数据库中。

【项目总结】

	这一次开发,其实做的很死板,之前实现了一版将题目和选项从数据库中动态加载出来,但问题是不知道如何将多选题答案取出,因为题目是动态加载的,前台没有ID,没有name,这样的话,ID和name也必须动态生成,这样的效果,强大的逻辑,灵活的代码,我真的无法驾驭。所以到最后,还是选了个取巧的方法,题目不多,直接写在前台了。
	因为一个新的需求,也是在这次的考试维护中,接触了整个系统的代码。之前,不论考试还是评教,都觉得系统做的很牛,这一次,看到代码,更想说,系统做的真的很牛。很多东西,都是写的高大上的,我在其他地方并没有见过,更没有遇到。虽然B/S学完了,但很多东西也都没有加以实践,我要学习的还有很多很多,每一个机会,都是需要自己去争取的。
目录
相关文章
|
.NET 数据库
ASP.NET制作调查问卷
<pre><span style="font-family:KaiTi_GB2312; font-size:18px"><strong>【项目需求】</strong> <span style="white-space:pre"> </span>最近几天,一直在做考试系统的维护。这一次的考试,思政部的老师提出了一个需求,希望在学生考试前填写一个关于本学期本学科的几个问题调查,以便更加了解学生
2481 0
|
8天前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
50 0
|
8天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
25 0
|
8天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
34 0
|
8天前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
124 5
|
9月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
126 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
67 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
121 0
|
10月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
148 0