请各位专家来看看PageLoad的问题 不在后置代码中作判断,在前台利用js脚本或者asp.net的验证控件进行判断,如果不符合要求就不提交。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把Page_Load中的代码全部写成如下if( !IsPostBack ){ //你的初始化代码} 两种思路:1、按楼上所说,你用验证控件在客户端来验证2、在Page_Load中: ... if( !IsPostBack ) { //取第一道题 } ... 在ButtonClick中: ... //如果没有选择,返回 //如果选择,记录结果 //取下一道题 ... gOODiDEA(无语) ( ) : 我要做的判断是:判断是否对每一项都做了选择,而且每一个选项都是通过PlaceHolder动态生成的,我怎么在前台利用js脚本或者asp.net的验证控件统计用户选择了多少个选项呢?to dragontt(龙人) :放在!IsPostBack里面也不行啊。那样的话,点击提交以后,我动态生成的控件也都不见了 在客户端用js坐在服务端也有办法,就是使用状态保存。可以用session或是viewstate,在你动态添加RadioButtonList之后,把这些信息加入状态保存的items中就行了。 timmy3310(tim) :我的试题是在 if( !IsPostBack ) { //通过一个存储过程,随机选出全部的试题:50题(50也是动态设定的),然后通过动态生成RadioButtonList,全部依次显示出来 } 你可以把上一次的问题保存在ViewState中在按钮事件中,如果选了,则调用存储过程获取一个新的试题绑定,然后把新试题加入ViewState,否则从ViewState中获取上一次的试题重新绑定而在Page_load中始终只绑定最开始的一次 wolve() ( ) :我如何把提交前(用户已经做了部分选项)的状态保存起来?我可以把当前页 PlaceHolder这个类上所动态创建及选择的所有状态都一起保存起来吗?前台的js怎么做?能不能说具体一点? To anna_aiya(哎呀): 你可以把动态生成控件的值移出来写如:void Page_Load(){ //创建你的控件 .... if(!IsPostBack ) { //你的初始化 ... }} 补充:if(!me.ispostboack){radiobuttonlist rbt=new new radiobuttonlist()//add attributesme.controls.add(rbt)me.session.items.add("rbt",rbt.[attributes]) //key= rbt,value=the importance attributes of rbt}elseradiobuttonlist rbt=((radiobuttonlist)me.session.items("rbt")me.controls.add(rbt) 动态生成的试题集我可以放到Session里,需要的时候重新生成控件,关键是我要把用户对已经做答的选项的答案状态也保存下来,不能提交返回以后,用户原来的做答就都没有了 Post回来后,你可以循环一遍,把所有的选择都记录下来在绑定的时候再把已经选择的项目选中,虽然麻烦点,但也只有这样了其实用客户端验证是最好的,:) 我随机选题,动态生成控件并绑定的代码如下: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;} ...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);... 写了一段一窍不通的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; } } 按照我的方法,你使用验证控件,你自己可以不用写Javascript 还是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 = "请选择某道题";//这是错误信息这个消息怎么没有显示出来?而且我怎么可以在页面的顶部显示一条相关的错误提示信息 对了,你在ASPX文件里面需要显示错误信息的地方加一个控件:<asp:ValidationSummary ID="summary" Runat="server"></asp:ValidationSummary>这个控件就是显示所有错误信息的控件如果要改用MessageBox显示,你可以给它加一个属性:ShowMessageBox="True" 【网站路径】急。。。 用sitemappath做导航,文章内容页(动态url地址)怎么实现导航? GridView的使用,高手来帮看下怎么回事? 页面重写的问题 画直线,请求帮助,来者有分 请教专家,帮忙看看下面的代码! 截取字符串的问题 vs c#.net 2008 创建一个类,设置连接数据库出错。求救,急,在线等 DataGrid删除数据时,遇到很多矛盾,请大家帮一下! asp.net core2怎么在中间件中给ViewData传值 请教正则表达式的使用方法?请高手指教 asp.net那些用visible=false的值被存放在那里。
写成如下
if( !IsPostBack )
{
//你的初始化代码
}
1、按楼上所说,你用验证控件在客户端来验证
2、在Page_Load中:
...
if( !IsPostBack )
{
//取第一道题
}
...
在ButtonClick中:
...
//如果没有选择,返回
//如果选择,记录结果
//取下一道题
...
放在!IsPostBack里面也不行啊。那样的话,点击提交以后,我动态生成的控件也都不见了
在服务端也有办法,就是使用状态保存。可以用session或是viewstate,在你动态添加RadioButtonList之后,把这些信息加入状态保存的items中就行了。
我的试题是在
if( !IsPostBack )
{
//通过一个存储过程,随机选出全部的试题:50题(50也是动态设定的),然后通过动态生成RadioButtonList,全部依次显示出来
}
你可以把动态生成控件的值移出来写
如:
void Page_Load()
{
//创建你的控件
.... if(!IsPostBack )
{
//你的初始化
...
}
}
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)
在绑定的时候再把已经选择的项目选中,虽然麻烦点,但也只有这样了其实用客户端验证是最好的,:)
{
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;}
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);
...
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;
}
}
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 = "请选择某道题";//这是错误信息
这个消息怎么没有显示出来?而且我怎么可以在页面的顶部显示一条相关的错误提示信息
<asp:ValidationSummary ID="summary" Runat="server"></asp:ValidationSummary>这个控件就是显示所有错误信息的控件如果要改用MessageBox显示,你可以给它加一个属性:
ShowMessageBox="True"