在siteserver上开发问卷调查

        进公司第一个任务就是在siteserver上增加问卷调查。主要原因是siteserver自带的投票功能比较单一每个投票是一个问题。其中还有个bug,就是当投票选项达到50以上就出现问题。因此需要进行问卷调查可以理解是一个调查下多个投票。数据库设计什么的就不说了。这里主要是说下如何将问卷支持添加到siteserver的模板中生成静态页面。

思路如下:

1、后台Vote.aspx主要功能根据voteid绑定问卷的题目答案以及进行提交和查看结果处理。首先重写Vote.aspx的Render事件。让每次请求Vote.aspx的时候生成对应的html文件,如Votetemplate_43.htm。这里面不能有<head>之类的。

参考代码:

 protected override void Render(HtmlTextWriter writer)
 {
        StringWriter html = new StringWriter();
        System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
        base.Render(tw);
        StreamWriter sw;
        string path = Server.MapPath("Vote") + "template_" + titleid + ".htm";
        sw = new StreamWriter(path, false, System.Text.Encoding.UTF8);
        int findex = html.ToString().IndexOf("<form");
        int lindex = html.ToString().IndexOf("</form>");
        sw.Write(html.ToString().Substring(findex, lindex - findex + 7));
        sw.Close();
        tw.Close();
        Response.Write(html.ToString());
 }

这样就生成了表单这类的所有问卷信息。说明下,我这的问卷绑定是通过在表单中的PlaceHolder1动态添加单选、多选、问答等情况的。

2、通过ajax调用上面生成的页面。

function get(num)
{
    var http = GetXmlHttp();
    var url;
   url = "Votetemplate_"+num+".htm";
    http.open("GET", url, true);
    http.onreadystatechange = function()
    {
        if (http.readyState == 4 && http.status ==200)
        {
            var text;
            text = bytes2BSTR(http.responseBody);
           document.getElementById("HtmlDiv").innerHTML =text;
         }
    }
    http.send(null);
}
function GetXmlHttp()
{
    var C = null;
    try
    {
        C = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
        try
        {
         C = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(sc)
        {
            C = null;
        }
    }

    if( !C && typeof XMLHttpRequest != "undefined" )
    {
        C = new XMLHttpRequest();
    }
    return C;
}

直接在模板中写上:

<script type="text/javascript" src="readhtml.js"></script>

<div id="HtmlDiv"></div>

然后在onload中调用Test(id)即可

原本的思路是在GetXmlHttp()中动态添加<div id="HtmlDiv"></div>省去在模板中写的,后来发现不行。还有onload中的Test原来打算写在readhtml.js中的。不是要考虑传入参数嘛。我想到了每次生成调用js的时候修改js文件也就是修改num占位符。不过后来被否定,因为那样I/O操作将很频繁,没有必要。

3、大家可能看到了bytes2BSTR函数没错,用它是为了解决乱码的。网上解决通过因为ajax异步输出文字的时候出来乱码。在这就不做说明了。

最后说明:可能有人看到这里觉得用ajax去调用html文件有必要吗?直接用js将html中的内容读入就不行了。我也说过,不过因为是js操作文件必须设置IE中的安全。(IE6.0中)希望对大家有用吧。

posted @ 2009-07-10 11:26  小军人  阅读(1968)  评论(10编辑  收藏  举报