菜鸟我一个月前还完全不知道什么是类,继承,现在接到一个很急的做网页的任务,现向各位大虾求教:要做一个投票的网页,网页中有若干个单选题,要求每题必选,对各个选项的投票分别进行计数。
投票控件用checkbox。
选择结束后,点击一个确定button。要求先对页面进行校验,保证每题都做了选择,否则仍在原页面上提示出错信息,点击一个重选button,重新选择。
如果确定每个单选题都已被选择,则转到下一个页面,输出投票结果。在这里菜鸟我有两处问题:
1.当网页跳转时,如何将第一个网页里的投票数据保存到下个网页输出,用application实现了一下,可以用,但感觉不太稳定。
2.再就是网页校验问题。开始没有链接输出结果网页时,是直接在网页下方设了一个显示出错信息的label,当按下button时,触发click事件,判断选择题是否已全部做完,若否,则将label设为可见,提示出错,再点重选button,又将label设为不可见。但链接网页(用PostBackUrl属性)后发现若出错,网页直接跳转了,而通过click事件修改PostBackUrl又不行(?why)。而验证栏里的控件好像又不能校验checkbox和button(不知道那个CustomValidator行不行,怎么用)。所以请高手给个意见,小弟万分感谢!跪拜求教!

解决方案 »

  1.   

    1.可以用ViewState传递
    2.写Javascript验证是否选择以及控制是否跳转页面
      

  2.   

    楼上说的我都不懂。
    我现在用Application传递。            Application["votes1"] = votesOfPro1;
                Application["votes2"] = votesOfPro2;
                Application["votes3"] = votesOfPro3;
    然后在第二页:         //取出数据
            int votesOfPro11=(int)Application["votes1"];
            int votesOfPro12 = (int)Application["votes2"];
            int votesOfPro13 = (int)Application["votes3"];
            //显示结果
            ResultLabel.Text = "i=" + votesOfPro11.ToString()+
                              votesOfPro12.ToString()+votesOfPro13.ToString();但奇怪的是,无论怎么投票,结果总是显示i=021
    设置在第一页显示,得到的结果是正确的。
    但传递到第二页,结果就不对了,真是匪夷所思啊!
      

  3.   

    1:用Session或者 ?传值 Session是每个用户一个,而Application是所有用户共享 所以不稳定
    2:你可以在服务器端判断是否全部填写,如果不则返回要填完整 如果全部满足则转
      

  4.   

    看你具体想效验什么,如果为空就 if(this.textBox.text == "") 如果是别的如果要数字的话 可以用正则表达式 等等
      

  5.   

    如果不了解session的话,给你一个简单的方案,在一个页面用多个面板,用户看起来是在多个页面上做选择,其实是你可以控制各个面板的visible属性就行了
      

  6.   

    看你具体想效验什么,如果为空就 if(this.textBox.text == "") 如果是别的如果要数字的话 可以用正则表达式 等等
    ------------------------------------------------------------------------------------
    用控件校验吗?如果不用控件,怎么控制转页呢?
    高歌大哥提出的倒是一种思路,不过我还是想变成老鸟的,session怎么用阿?
      

  7.   

    this.Session["Num"] = 8;
    int i = (int)this.Session["Num"];你可以用它来记录票数~
      

  8.   

    按楼上的方法做了,在类中定义:
         this.Session["votesOfPro1"]=8;
    提示编译错误:不能在变量声明中指定数组大小(尝试用new表达式初始化)
    又用下面的语句试了一下,还是提示上面的错误
         int Session["votesOfPro1"]=new Session;
      

  9.   

    用Session替换上面的Application,运行后提示:
                /未将对象引用设置到对象的实例
         错误行:行 30:         int votesOfPro11 = (int)Session ["votes1"];
      

  10.   

    1. 你的程序采用了数据库没有?如果有数据库的话,你还是老实点用Get或者post方式传递参数(类似于鸽子虫大侠的方法),然后修改你的数据库。
    2. 如果是单选题,不要用checkbox, 用radiobuttonlist,校验如下函数(我机器上没有环境,无法调试,只是凭印象写的,可能有错,你自己调试一把)
    private bool CheckSelected()
    {
    foreach (Control radioBut in this.Controls)
    {
    if (radioBut is RadioButtonList)
    {
    if ((radioBut as  RadioButtonList).SelectedIndex < 0)
    {
    return false;
    } }
    }
    return true;
    }
    可以判断有没有题没有选择
      

  11.   

    不是在类中定义,而是类似这样:
    private void Button1_Click(object sender, System.EventArgs e)
    {
    this.Session["Num"] = 8;
    }private void Button2_Click(object sender, System.EventArgs e)
    {
    int i = (int)this.Session["Num"];
    }在第一页存,第二页取出来用
      

  12.   

    用Session替换上面的Application,运行后提示:
    /未将对象引用设置到对象的实例
    错误行:行 30: int votesOfPro11 = (int)Session ["votes1"];这是你没有将Session ["votes1"]赋初值
    凡是报这个错的,你都需要检查检查有什么东西没有实例化就被拿来用了
      

  13.   

    按laladeng的方法又试了一下,在button_click事件里用Application可以传。
    当出现这样的问题:
        就是第一次调试程序时,传给第二个网页的数据是对的,但再改变投票结果,继续调试,则第二个网页始终显示第一次调试的结果,也就是说,随着调试的改变,第二个页面的传递结果没有更新。但先断开第二页,而只在第一页上验证结果,显示是正确的。第二页的代码如下:
     protected void Page_Load(object sender, EventArgs e)
        {
              initResultPage();
         }
        private void initResultPage()
        {
            ResultTitle.Visible = true;
            ResultLabel.Visible = true;
            //取数据
            int votesOfPro11=(int)Application["votes1"];
            int votesOfPro12 = (int)Application["votes2"];
            int votesOfPro13 = (int)Application["votes3"];
            //显示数据
            ResultLabel.Text = "i=" + votesOfPro11.ToString()
                       +votesOfPro12.ToString()+votesOfPro13.ToString();
      

  14.   

    没有用数据库,用radiobutton要简单一些,但想挑战一下自己(另外想做的好看一点),就用了checkbox。
    不过数据库迟早要加的。
      

  15.   

    又试了一下,将resulttitle和resultlabel分别改为false,第二页的label就看不见了,
    说明每次调试时第二页的 initResultPage()都被执行了,但数据却传不过来。
    但断开第二页,在第一页上用Application["votes1"]输出又是正确的,
    实在是奇怪!