但是在求用户的解答结果遇到很大麻烦。我在页面上放置一个<asp:button>,那么每一次单击(计算客户的解答),都会引发服务器端事件,从而导致又一次的计算考试题目。而无法求出原来的计算结果。
在ASP程序里,计算表单的值很容易,而且action='theOther.asp',也就是结果页面和原题目页面是两个不同的页面。但是<asp:button>,结果与表单在同一个页面,并且引发新的服务器端事件。
如果在<asp:button>的click事件里写;server.transfer("theOther.aspx"),也引发了服务器端事件。
真晕啊。
11 个解决方案
#1
不要用server.transfer,用response.redirect
#2
谢谢楼上的。但当我用response.redirect("theOther.aspx")的方式时,原来的页面与theOther.aspx没有一点关系。我要求出原页面用户所做的解答很难了。
我在查看源代码里看到我的aspx.vb文件里做的服务器端控件,asp.net解析为如下:
<form name="Form1" method="post" action="theOne.aspx" id="Form1">
也就是求表单的值与表单本身在同一个页面。我能否将这个action="theOne.aspx" 修改为action="theOther.aspx",以便我在另外一个页面求出用户的值?以前ASP默认就是这种模式。
因为如果我在同一个页面求值,需要发送到服务器端,导致我求出的值与原来的题目对应不上了(因为题目是随机出的)。
我在查看源代码里看到我的aspx.vb文件里做的服务器端控件,asp.net解析为如下:
<form name="Form1" method="post" action="theOne.aspx" id="Form1">
也就是求表单的值与表单本身在同一个页面。我能否将这个action="theOne.aspx" 修改为action="theOther.aspx",以便我在另外一个页面求出用户的值?以前ASP默认就是这种模式。
因为如果我在同一个页面求值,需要发送到服务器端,导致我求出的值与原来的题目对应不上了(因为题目是随机出的)。
#3
在Page_load中
if(!IsPostBack)
{
...按按钮以前的处理
}
---------------------------------------------------------
试
if(!IsPostBack)
{
...按按钮以前的处理
}
---------------------------------------------------------
试
#4
在Page_load中
if(!IsPostBack)
{
...按按钮以前的处理
}
采用这种方式处理,确实可以区分第一次请求和再次单击按扭。但是我很难求出用户的值/
因为我的控件都是用动态方式添加进表格中的。什么时候加入控件是RadioButtonList 或者控件CheckBoxList,根据数据库中的单选题或多选题而定。这两个控件绑定了题库里的题目选项。
if(!IsPostBack)
{
...按按钮以前的处理
}
采用这种方式处理,确实可以区分第一次请求和再次单击按扭。但是我很难求出用户的值/
因为我的控件都是用动态方式添加进表格中的。什么时候加入控件是RadioButtonList 或者控件CheckBoxList,根据数据库中的单选题或多选题而定。这两个控件绑定了题库里的题目选项。
#5
如果在if(!IsPostBack)
{
....动态添加控件
}
那么我根本无法求出用户输入的值。
而如果我动态添加的控件不写在if(!IsPostBack){}之间,可以求出用户的值,但同时发生了服务器端事件,导致重新对控件进行了随机数运算。
两样都达不到我的要求。晕死!
{
....动态添加控件
}
那么我根本无法求出用户输入的值。
而如果我动态添加的控件不写在if(!IsPostBack){}之间,可以求出用户的值,但同时发生了服务器端事件,导致重新对控件进行了随机数运算。
两样都达不到我的要求。晕死!
#6
很多种情况会造成页面提交,包括意外情况。所以不应该在页面提交就计算考试结果,也就是不应该在page_load中回发就开始计算结果。你可以把“交卷”作为一个大大的明显的按钮放到卷子上,点击这个按钮才计算考试结果,并且也就不再接受对考卷修改。
在asp.net中,与传统的winForm编程方式所遵循的事件驱动(而非过程驱动方式)一样,所有操作基本上都应该在具体界面对象对应的事件中去作,不要在装载页面的时候做任何业务操作。装载页面应该只用于显示初始画面以及回发时获取页面状态(这也是一种初始化画面,重建初始化画面之后asp.net才找到对应的控件回填状态和事件等等)。
在asp.net中,与传统的winForm编程方式所遵循的事件驱动(而非过程驱动方式)一样,所有操作基本上都应该在具体界面对象对应的事件中去作,不要在装载页面的时候做任何业务操作。装载页面应该只用于显示初始画面以及回发时获取页面状态(这也是一种初始化画面,重建初始化画面之后asp.net才找到对应的控件回填状态和事件等等)。
#7
用脚本把,不刷新提交那种.
javascript+xmlhttp
把结果直接输出到页面.
javascript+xmlhttp
把结果直接输出到页面.
#8
在显示方面,考卷不论怎样刷新,也都应该有记忆(状态)功能,能够显示同一张内容的考卷。
#9
我现在是在page_load中显示考试题目。这些考试题目是用随机数计算出来的,考试的选项是动态添加的,用RadioButtonList 或者控件CheckBoxList.
我做了一个按扭,叫“解答”,在这个按扭里要求出用户对题目的解答。现在的问题是:
1)我无法计算出用户的答案。我是这样做的:在page_load中动态添加的控件,我放到一个控件数组里。然后在按扭里计算该控件数组的值。
Dim ctl As Control
For Each ctl In arrC 'arrc为控件数组
If TypeOf (ctl) Is RadioButtonList Then
Dim cs As New RadioButtonList()
cs = CType(ctl, RadioButtonList)
Dim str As String
str = cs.SelectedItem.Text
Response.Write(str & "<br>")
End If
Next
错误原因:str = cs.SelectedItem.Text 没有实例化对象
我做了一个按扭,叫“解答”,在这个按扭里要求出用户对题目的解答。现在的问题是:
1)我无法计算出用户的答案。我是这样做的:在page_load中动态添加的控件,我放到一个控件数组里。然后在按扭里计算该控件数组的值。
Dim ctl As Control
For Each ctl In arrC 'arrc为控件数组
If TypeOf (ctl) Is RadioButtonList Then
Dim cs As New RadioButtonList()
cs = CType(ctl, RadioButtonList)
Dim str As String
str = cs.SelectedItem.Text
Response.Write(str & "<br>")
End If
Next
错误原因:str = cs.SelectedItem.Text 没有实例化对象
#10
谢谢sp1234(再过半年估计可以抛掉简单的类型观改用范型了)对我的帮助。可以告诉我QQ吗?
我的是43609480
谢谢
我的是43609480
谢谢
#11
我的总体思路是这样的:
'定义一个控件数组,接受动态添加的控件
private arrControls() as control
private page_load()
Dim j As Integer
For j = 0 To imax - 1 'iamx表示总共有多少道题目
dr = tb.Select("No='" & rand(j) & "'")
Dim r As New TableRow()
Dim c As New TableCell()
c.Text = (j + 1).ToString & "。" & dr(0).Item("tigan")
r.Cells.Add(c)
tabl.Rows.Add(r)
Dim r1 As New TableRow()
Dim c1 As New TableCell()
Dim rad As New RadioButtonList()
Dim chk As New CheckBoxList()
If Trim(dr(0).Item("ttype")) = "多选题" Then
chk.DataSource = arr1 'arr1为已经计算好的选项(略去计算)
chk.ID = "chk" & j.ToString
chk.DataBind()
c1.Controls.Add(chk)
arrControls(j) = chk
Else
rad.DataSource = arr1
rad.ID = "rad" & j.ToString
rad.DataBind()
c1.Controls.Add(rad)
arrControls(j) = rad
End If
r1.Cells.Add(c1)
tabl.Rows.Add(r1)
Next
end sub
Private Sub Button1_Click
Dim ctl As Control
For Each ctl In arrControls 'arrControls为控件数组
If TypeOf (ctl) Is RadioButtonList Then
Dim cs As New RadioButtonList()
cs = CType(ctl, RadioButtonList)
Dim str As String
str = cs.SelectedItem.Text
Response.Write(str & "<br>")
End If
Next
end sub
运行button1_click,总是 cs.SelectedItem.Text出错
'定义一个控件数组,接受动态添加的控件
private arrControls() as control
private page_load()
Dim j As Integer
For j = 0 To imax - 1 'iamx表示总共有多少道题目
dr = tb.Select("No='" & rand(j) & "'")
Dim r As New TableRow()
Dim c As New TableCell()
c.Text = (j + 1).ToString & "。" & dr(0).Item("tigan")
r.Cells.Add(c)
tabl.Rows.Add(r)
Dim r1 As New TableRow()
Dim c1 As New TableCell()
Dim rad As New RadioButtonList()
Dim chk As New CheckBoxList()
If Trim(dr(0).Item("ttype")) = "多选题" Then
chk.DataSource = arr1 'arr1为已经计算好的选项(略去计算)
chk.ID = "chk" & j.ToString
chk.DataBind()
c1.Controls.Add(chk)
arrControls(j) = chk
Else
rad.DataSource = arr1
rad.ID = "rad" & j.ToString
rad.DataBind()
c1.Controls.Add(rad)
arrControls(j) = rad
End If
r1.Cells.Add(c1)
tabl.Rows.Add(r1)
Next
end sub
Private Sub Button1_Click
Dim ctl As Control
For Each ctl In arrControls 'arrControls为控件数组
If TypeOf (ctl) Is RadioButtonList Then
Dim cs As New RadioButtonList()
cs = CType(ctl, RadioButtonList)
Dim str As String
str = cs.SelectedItem.Text
Response.Write(str & "<br>")
End If
Next
end sub
运行button1_click,总是 cs.SelectedItem.Text出错
#1
不要用server.transfer,用response.redirect
#2
谢谢楼上的。但当我用response.redirect("theOther.aspx")的方式时,原来的页面与theOther.aspx没有一点关系。我要求出原页面用户所做的解答很难了。
我在查看源代码里看到我的aspx.vb文件里做的服务器端控件,asp.net解析为如下:
<form name="Form1" method="post" action="theOne.aspx" id="Form1">
也就是求表单的值与表单本身在同一个页面。我能否将这个action="theOne.aspx" 修改为action="theOther.aspx",以便我在另外一个页面求出用户的值?以前ASP默认就是这种模式。
因为如果我在同一个页面求值,需要发送到服务器端,导致我求出的值与原来的题目对应不上了(因为题目是随机出的)。
我在查看源代码里看到我的aspx.vb文件里做的服务器端控件,asp.net解析为如下:
<form name="Form1" method="post" action="theOne.aspx" id="Form1">
也就是求表单的值与表单本身在同一个页面。我能否将这个action="theOne.aspx" 修改为action="theOther.aspx",以便我在另外一个页面求出用户的值?以前ASP默认就是这种模式。
因为如果我在同一个页面求值,需要发送到服务器端,导致我求出的值与原来的题目对应不上了(因为题目是随机出的)。
#3
在Page_load中
if(!IsPostBack)
{
...按按钮以前的处理
}
---------------------------------------------------------
试
if(!IsPostBack)
{
...按按钮以前的处理
}
---------------------------------------------------------
试
#4
在Page_load中
if(!IsPostBack)
{
...按按钮以前的处理
}
采用这种方式处理,确实可以区分第一次请求和再次单击按扭。但是我很难求出用户的值/
因为我的控件都是用动态方式添加进表格中的。什么时候加入控件是RadioButtonList 或者控件CheckBoxList,根据数据库中的单选题或多选题而定。这两个控件绑定了题库里的题目选项。
if(!IsPostBack)
{
...按按钮以前的处理
}
采用这种方式处理,确实可以区分第一次请求和再次单击按扭。但是我很难求出用户的值/
因为我的控件都是用动态方式添加进表格中的。什么时候加入控件是RadioButtonList 或者控件CheckBoxList,根据数据库中的单选题或多选题而定。这两个控件绑定了题库里的题目选项。
#5
如果在if(!IsPostBack)
{
....动态添加控件
}
那么我根本无法求出用户输入的值。
而如果我动态添加的控件不写在if(!IsPostBack){}之间,可以求出用户的值,但同时发生了服务器端事件,导致重新对控件进行了随机数运算。
两样都达不到我的要求。晕死!
{
....动态添加控件
}
那么我根本无法求出用户输入的值。
而如果我动态添加的控件不写在if(!IsPostBack){}之间,可以求出用户的值,但同时发生了服务器端事件,导致重新对控件进行了随机数运算。
两样都达不到我的要求。晕死!
#6
很多种情况会造成页面提交,包括意外情况。所以不应该在页面提交就计算考试结果,也就是不应该在page_load中回发就开始计算结果。你可以把“交卷”作为一个大大的明显的按钮放到卷子上,点击这个按钮才计算考试结果,并且也就不再接受对考卷修改。
在asp.net中,与传统的winForm编程方式所遵循的事件驱动(而非过程驱动方式)一样,所有操作基本上都应该在具体界面对象对应的事件中去作,不要在装载页面的时候做任何业务操作。装载页面应该只用于显示初始画面以及回发时获取页面状态(这也是一种初始化画面,重建初始化画面之后asp.net才找到对应的控件回填状态和事件等等)。
在asp.net中,与传统的winForm编程方式所遵循的事件驱动(而非过程驱动方式)一样,所有操作基本上都应该在具体界面对象对应的事件中去作,不要在装载页面的时候做任何业务操作。装载页面应该只用于显示初始画面以及回发时获取页面状态(这也是一种初始化画面,重建初始化画面之后asp.net才找到对应的控件回填状态和事件等等)。
#7
用脚本把,不刷新提交那种.
javascript+xmlhttp
把结果直接输出到页面.
javascript+xmlhttp
把结果直接输出到页面.
#8
在显示方面,考卷不论怎样刷新,也都应该有记忆(状态)功能,能够显示同一张内容的考卷。
#9
我现在是在page_load中显示考试题目。这些考试题目是用随机数计算出来的,考试的选项是动态添加的,用RadioButtonList 或者控件CheckBoxList.
我做了一个按扭,叫“解答”,在这个按扭里要求出用户对题目的解答。现在的问题是:
1)我无法计算出用户的答案。我是这样做的:在page_load中动态添加的控件,我放到一个控件数组里。然后在按扭里计算该控件数组的值。
Dim ctl As Control
For Each ctl In arrC 'arrc为控件数组
If TypeOf (ctl) Is RadioButtonList Then
Dim cs As New RadioButtonList()
cs = CType(ctl, RadioButtonList)
Dim str As String
str = cs.SelectedItem.Text
Response.Write(str & "<br>")
End If
Next
错误原因:str = cs.SelectedItem.Text 没有实例化对象
我做了一个按扭,叫“解答”,在这个按扭里要求出用户对题目的解答。现在的问题是:
1)我无法计算出用户的答案。我是这样做的:在page_load中动态添加的控件,我放到一个控件数组里。然后在按扭里计算该控件数组的值。
Dim ctl As Control
For Each ctl In arrC 'arrc为控件数组
If TypeOf (ctl) Is RadioButtonList Then
Dim cs As New RadioButtonList()
cs = CType(ctl, RadioButtonList)
Dim str As String
str = cs.SelectedItem.Text
Response.Write(str & "<br>")
End If
Next
错误原因:str = cs.SelectedItem.Text 没有实例化对象
#10
谢谢sp1234(再过半年估计可以抛掉简单的类型观改用范型了)对我的帮助。可以告诉我QQ吗?
我的是43609480
谢谢
我的是43609480
谢谢
#11
我的总体思路是这样的:
'定义一个控件数组,接受动态添加的控件
private arrControls() as control
private page_load()
Dim j As Integer
For j = 0 To imax - 1 'iamx表示总共有多少道题目
dr = tb.Select("No='" & rand(j) & "'")
Dim r As New TableRow()
Dim c As New TableCell()
c.Text = (j + 1).ToString & "。" & dr(0).Item("tigan")
r.Cells.Add(c)
tabl.Rows.Add(r)
Dim r1 As New TableRow()
Dim c1 As New TableCell()
Dim rad As New RadioButtonList()
Dim chk As New CheckBoxList()
If Trim(dr(0).Item("ttype")) = "多选题" Then
chk.DataSource = arr1 'arr1为已经计算好的选项(略去计算)
chk.ID = "chk" & j.ToString
chk.DataBind()
c1.Controls.Add(chk)
arrControls(j) = chk
Else
rad.DataSource = arr1
rad.ID = "rad" & j.ToString
rad.DataBind()
c1.Controls.Add(rad)
arrControls(j) = rad
End If
r1.Cells.Add(c1)
tabl.Rows.Add(r1)
Next
end sub
Private Sub Button1_Click
Dim ctl As Control
For Each ctl In arrControls 'arrControls为控件数组
If TypeOf (ctl) Is RadioButtonList Then
Dim cs As New RadioButtonList()
cs = CType(ctl, RadioButtonList)
Dim str As String
str = cs.SelectedItem.Text
Response.Write(str & "<br>")
End If
Next
end sub
运行button1_click,总是 cs.SelectedItem.Text出错
'定义一个控件数组,接受动态添加的控件
private arrControls() as control
private page_load()
Dim j As Integer
For j = 0 To imax - 1 'iamx表示总共有多少道题目
dr = tb.Select("No='" & rand(j) & "'")
Dim r As New TableRow()
Dim c As New TableCell()
c.Text = (j + 1).ToString & "。" & dr(0).Item("tigan")
r.Cells.Add(c)
tabl.Rows.Add(r)
Dim r1 As New TableRow()
Dim c1 As New TableCell()
Dim rad As New RadioButtonList()
Dim chk As New CheckBoxList()
If Trim(dr(0).Item("ttype")) = "多选题" Then
chk.DataSource = arr1 'arr1为已经计算好的选项(略去计算)
chk.ID = "chk" & j.ToString
chk.DataBind()
c1.Controls.Add(chk)
arrControls(j) = chk
Else
rad.DataSource = arr1
rad.ID = "rad" & j.ToString
rad.DataBind()
c1.Controls.Add(rad)
arrControls(j) = rad
End If
r1.Cells.Add(c1)
tabl.Rows.Add(r1)
Next
end sub
Private Sub Button1_Click
Dim ctl As Control
For Each ctl In arrControls 'arrControls为控件数组
If TypeOf (ctl) Is RadioButtonList Then
Dim cs As New RadioButtonList()
cs = CType(ctl, RadioButtonList)
Dim str As String
str = cs.SelectedItem.Text
Response.Write(str & "<br>")
End If
Next
end sub
运行button1_click,总是 cs.SelectedItem.Text出错