动态生成html表单并提交

之前在做一个问卷调查的时候,用到了动态生成html表单,个人感觉,html方式虽然原始,但它是万能的解决方法。

生成页查询数据库,然后得到泛型,用stringbuilder 生成html代码。

 


 1 List<Model.Quest> wtlist = new BLL.Quest().GetListArray("dcid=" + dcid + "order by orderid asc");
 2        System.Text.StringBuilder sb = new System.Text.StringBuilder();
 3        sb.Append("<table width=\"100%\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#0099FF\">");
 4        sb.Append("<input name=\"dcid\" type=\"hidden\" value=" + dcid + " />");
 5 foreach (Model.Quest wt in wtlist)
 6        {
 7            switch (wt.qtype)
 8            {
 9                case 1:
10                    sb.Append("<tr><td><div   id=\"q" + wt.qid + "\" ><strong><span id=\"t" + wt.qid + "\">" + wt.qname + ": </span></strong>");
11                    sb.Append("</td><td>");
12                    sb.Append(retrbitem(wt.qid));
13                    break;
14                case 2:
15                    sb.Append("<tr><td><div id=\"q" + wt.qid + "\" ><strong><span id=\"t" + wt.qid + "\">" + wt.qname + ": </strong>\r");
16                    sb.Append("</td><td>");
17                    sb.Append(retmutitem(wt.qid));
18                    break;
19                case 4:
20                    break;
21                case 3:
22                    sb.Append("<tr><td><div  id=\"q" + wt.qid + "\" ><strong><span id=\"t" + wt.qid + "\">" + wt.qname + ":</span></strong>\r");
23                    sb.Append("</td><td>");
24                    sb.Append(rettk(wt.qid));
25                    break;
26
27            }

28        }

29        sb.Append("</table>");
30        this.gx.InnerHtml = sb.ToString(); //前台有一个div runat=server
31    }
32
33    string retrbitem(int qid)//生成单选项的函数,其他我就不贴了
34    {
35        StringBuilder sb = new StringBuilder();
36        List<Model.SItem> rbl = new BLL.SItem().GetListArray("qid=" + qid);
37
38        foreach (Model.SItem rb in rbl)
39        {
40            sb.Append("<input type=\"radio\"  name=\"rb" + qid + "\"");
41            sb.Append("  value=\"" + qid + "$" + rb.sid + "\"/>" + rb.sitem);
42        }

43        sb.Append("</td></tr>");
44        return sb.ToString();
45    }

 

前台的js 还没做到判断单选和多选,只能判断填空是否填写了,高手指点一下。

input中的value用$符号分割了问题的id和选项id,以便在接受页得到动态生成的问题id。

前台的页中指定post 的接收页

 <form id="form1" action="r.aspx" method="post" >
            <div runat="server" id="gx">
                </div>
                    </form>

提交的button 我就不写了,在提交前用js判断一下填写情况。

=================下面是接收页=====================

 


 1    for (int i = 0; i < Request.Form.Count; i++)
 2    {
 3        string tar = Request.Form.Keys[i].ToString().Substring(02);
 4        switch (tar)
 5        {
 6            case "dc":
 7
 8                dcid = Request.Form[i].ToString();
 9                /*得到问卷的id ,在前面动态生成的表单中加了一个hidden的input
10                其他的操作细节我就不再演示了,我是写入数据库中。还加入了一些逻辑判断。*/

11                break;
12            case "dx":  //多选情况
13                char[] spl = '$' };
14                string selval = Request.Form[i].ToString();
15                string[] dx = selval.Split(spl);
16                //dx[0]是问题id,前面写入了input的value中
17
18            case "rb":   //单选情况
19                string rbtmp = Request.Form[i].ToString();
20                char[] splrb = '$' };
21                string[] ans = rbtmp.Split(splrb);
22                //ans[0] ans[1] 我就不多说了,跟上面一样
23                break;
24            case "tk":
25                char[] spltk = '$' };
26                string tkval = Request.Form.Keys[i].ToString();
27                string[] tkt = tkval.Split(spltk);
28                //Request.Form[i].ToString() 就是post过来的input text 中的内容了
29                break;
30        }

31    }

 

具体的逻辑关系判断以及添加数据库,我就不复述了,总体的思路就是这样,根据数据库动态生成的表单,post过来。

接收,因为写入了前缀,所以比较轻松的就获取到了各种不同的表单的值。(因为我数据库存储的时候放在2个表中,填空放入单独的表,单选和多选放在了一个表中,只存选项id和问题id)

在数据库中存储了填写人的ip地址,限制了再次填写的时间,在接收之前判断了一下,这样可以防止将表单另存为网页之后刷表单行为。

第一次发原创的东西,大家见笑了。高手不要板砖伺候就好,大家多提意见。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值