不在后置代码中作判断,在前台利用js脚本或者asp.net的验证控件进行判断,如果不符合要求就不提交。

解决方案 »

  1.   

    把Page_Load中的代码全部
    写成如下
    if( !IsPostBack )
    {
       //你的初始化代码
    }
      

  2.   

    两种思路:
    1、按楼上所说,你用验证控件在客户端来验证
    2、在Page_Load中:
        ...
        if( !IsPostBack )
        {
           //取第一道题
        }
        ...
       在ButtonClick中:
       ...
       //如果没有选择,返回
       //如果选择,记录结果
       //取下一道题
       ...
      

  3.   

    gOODiDEA(无语) ( ) :  我要做的判断是:判断是否对每一项都做了选择,而且每一个选项都是通过PlaceHolder动态生成的,我怎么在前台利用js脚本或者asp.net的验证控件统计用户选择了多少个选项呢?to dragontt(龙人) :
    放在!IsPostBack里面也不行啊。那样的话,点击提交以后,我动态生成的控件也都不见了
      

  4.   

    在客户端用js坐
    在服务端也有办法,就是使用状态保存。可以用session或是viewstate,在你动态添加RadioButtonList之后,把这些信息加入状态保存的items中就行了。
      

  5.   

    timmy3310(tim) :
    我的试题是在 
    if( !IsPostBack )
        {
           //通过一个存储过程,随机选出全部的试题:50题(50也是动态设定的),然后通过动态生成RadioButtonList,全部依次显示出来
        }
      

  6.   

    你可以把上一次的问题保存在ViewState中在按钮事件中,如果选了,则调用存储过程获取一个新的试题绑定,然后把新试题加入ViewState,否则从ViewState中获取上一次的试题重新绑定而在Page_load中始终只绑定最开始的一次
      

  7.   

    wolve() ( ) :我如何把提交前(用户已经做了部分选项)的状态保存起来?我可以把当前页 PlaceHolder这个类上所动态创建及选择的所有状态都一起保存起来吗?前台的js怎么做?能不能说具体一点?
      

  8.   

    To anna_aiya(哎呀):
       你可以把动态生成控件的值移出来写
    如:
    void Page_Load()
    {
       //创建你的控件
       ....   if(!IsPostBack )
       {
         //你的初始化
         ...
       }
    }
      

  9.   

    补充:
    if(!me.ispostboack)
    {
    radiobuttonlist rbt=new new radiobuttonlist()
    //add attributes
    me.controls.add(rbt)me.session.items.add("rbt",rbt.[attributes]) //key= rbt,value=the importance attributes of rbt
    }
    else
    radiobuttonlist rbt=((radiobuttonlist)me.session.items("rbt")
    me.controls.add(rbt)
      

  10.   

    动态生成的试题集我可以放到Session里,需要的时候重新生成控件,关键是我要把用户对已经做答的选项的答案状态也保存下来,不能提交返回以后,用户原来的做答就都没有了
      

  11.   

    Post回来后,你可以循环一遍,把所有的选择都记录下来
    在绑定的时候再把已经选择的项目选中,虽然麻烦点,但也只有这样了其实用客户端验证是最好的,:)
      

  12.   

    我随机选题,动态生成控件并绑定的代码如下:private void ExamTitleSelect()
    {
    SqlCommand myCommand=new SqlCommand();
    myCommand.Connection=new SqlConnection(strCon);
    myCommand.Connection.Open();
    myCommand.CommandText = "sp_exam" ;//存储过程名,随机选题    返回多个数据集,每个数据集为一题
    myCommand.CommandType = CommandType.StoredProcedure ;//命令类型
                    
    SqlParameter exam_num = new SqlParameter("@enum", SqlDbType.Int ,4);
    exam_num.Value =pTitleNum;
    myCommand.Parameters.Add(exam_num);
    myCommand.ExecuteNonQuery(); SqlDataAdapter myad= new SqlDataAdapter(); 
    myad.SelectCommand=myCommand;
    DataSet dsShowExam=new DataSet();
    myad.Fill(dsShowExam,"tbExamTitle");

    int i=0; //控制对选择出来的多个数据集(多道题)进行轮询控制,并标识 试题序号,及动态生成各题选项组RadioButtonList的id区分标识
    string strRightAnswer=""; //存放每道题的正确答案
    foreach(DataTable myTable in dsShowExam.Tables)
      {
    i++;

    int n=0; //控制每道试题中各选项的添加
    RadioButtonList rblTopic=new RadioButtonList();
    foreach(DataRow myRow in myTable.Rows)
    {
    if (n==0)//写试题的题目
    {
    plh_Exam.Controls.Add(new LiteralControl(i.ToString()+"、"+myRow["question"].ToString()));
    plh_Exam.Controls.Add(new LiteralControl("<br>"));
    strRightAnswer+=myRow["answer"].ToString ()+",";//存放该题的正确答案
    }
    rblTopic.Items.Add(myRow["bid"].ToString ());
    rblTopic.Items[n].Value=myRow["bid"].ToString ();
    rblTopic.Items[n].Text=myRow["choice"].ToString();
    n++;

    }
    rblTopic.ID="rblT"+i.ToString();
    plh_Exam.Controls.Add(rblTopic);
    plh_Exam.Controls.Add(new LiteralControl("<br>"));
    }
    strRightAnswer=strRightAnswer.Substring (0,strRightAnswer.Length -1);
    Session["RightAnswer"]=strRightAnswer;}
      

  13.   

    ...
    RadioButtonList rblTopic=new RadioButtonList();RequiredFieldValidator v = new RequiredFieldValidator();
    v.ControlToValidate = rblTopic;
    v.EnableClientScript = true;
    v.Text = "*"; //显示在Label中的内容
    v.ErrorMessage = "请选择某道题";//这是错误信息foreach(DataRow myRow in myTable.Rows)
    {
    ...
    }
    ...
    plh_Exam.Controls.Add(rblTopic);
    plh_Exam.Controls.Add(v);
    ...
      

  14.   

    写了一段一窍不通的js(可怜我js没有学过)谁来看看对不对?
    function SubmitCheck()
     {
      
      if (document.exam.txbReferFlag.value=="Y")
    {
    alert("您已经提交过一次答案!请重新开始一组题!");
    return false;
    }
     else
    {
       var SelectCount=0;
      for(var i=1;i<=3;i++)
          {
             var tmpControl='document.exam.rblT'+i;//我想访问我后台动态生成的控件
             if (Request.Params[rblT]!=null)
    {  
    SelectCount+=1;
    }
      
           }
      if( SelectCount<3)
        {
          return false;
         }
       

    }
      

  15.   

    按照我的方法,你使用验证控件,你自己可以不用写Javascript
      

  16.   

    还是timmy3310(tim) 的验证控件挺好用^_^rblTopic.ID="rblT"+i.ToString();
    plh_Exam.Controls.Add(rblTopic);RequiredFieldValidator vRepuireField = new RequiredFieldValidator();//对每道题添加验证控件,强制用户回答每道题
    vRepuireField.ControlToValidate = "rblT"+i.ToString();
    vRepuireField.EnableClientScript = true;
    vRepuireField.Text = "*"; //显示在Label中的内容
    vRepuireField.ErrorMessage = "请选择某道题";//这是错误信息
    plh_Exam.Controls.Add(vRepuireField);
    但是
    vRepuireField.ErrorMessage = "请选择某道题";//这是错误信息
    这个消息怎么没有显示出来?而且我怎么可以在页面的顶部显示一条相关的错误提示信息
      

  17.   

    对了,你在ASPX文件里面需要显示错误信息的地方加一个控件:
    <asp:ValidationSummary ID="summary" Runat="server"></asp:ValidationSummary>这个控件就是显示所有错误信息的控件如果要改用MessageBox显示,你可以给它加一个属性:
    ShowMessageBox="True"