关于服务器端响应和客户端响应

时间:2021-07-31 17:00:50
因为我做的考试系统,所有考试题目都是用随机数函数从题库中求出来的,现在服务器可以很好的显示经过计算的题目了。我的要求是:如果一组题目出出来了,那么用户可以对这组题目进行解答,计算机需要自动判分。

但是在求用户的解答结果遇到很大麻烦。我在页面上放置一个<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默认就是这种模式。

因为如果我在同一个页面求值,需要发送到服务器端,导致我求出的值与原来的题目对应不上了(因为题目是随机出的)。

#3


在Page_load中
if(!IsPostBack)
{
    ...按按钮以前的处理
}

---------------------------------------------------------

#4


在Page_load中
if(!IsPostBack)
{
    ...按按钮以前的处理
}
采用这种方式处理,确实可以区分第一次请求和再次单击按扭。但是我很难求出用户的值/

因为我的控件都是用动态方式添加进表格中的。什么时候加入控件是RadioButtonList 或者控件CheckBoxList,根据数据库中的单选题或多选题而定。这两个控件绑定了题库里的题目选项。

#5


如果在if(!IsPostBack)
{
   ....动态添加控件
}
那么我根本无法求出用户输入的值。

而如果我动态添加的控件不写在if(!IsPostBack){}之间,可以求出用户的值,但同时发生了服务器端事件,导致重新对控件进行了随机数运算。
两样都达不到我的要求。晕死!

#6


很多种情况会造成页面提交,包括意外情况。所以不应该在页面提交就计算考试结果,也就是不应该在page_load中回发就开始计算结果。你可以把“交卷”作为一个大大的明显的按钮放到卷子上,点击这个按钮才计算考试结果,并且也就不再接受对考卷修改。

在asp.net中,与传统的winForm编程方式所遵循的事件驱动(而非过程驱动方式)一样,所有操作基本上都应该在具体界面对象对应的事件中去作,不要在装载页面的时候做任何业务操作。装载页面应该只用于显示初始画面以及回发时获取页面状态(这也是一种初始化画面,重建初始化画面之后asp.net才找到对应的控件回填状态和事件等等)。

#7


用脚本把,不刷新提交那种.
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  没有实例化对象

#10


谢谢sp1234(再过半年估计可以抛掉简单的类型观改用范型了)对我的帮助。可以告诉我QQ吗?
我的是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出错

#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默认就是这种模式。

因为如果我在同一个页面求值,需要发送到服务器端,导致我求出的值与原来的题目对应不上了(因为题目是随机出的)。

#3


在Page_load中
if(!IsPostBack)
{
    ...按按钮以前的处理
}

---------------------------------------------------------

#4


在Page_load中
if(!IsPostBack)
{
    ...按按钮以前的处理
}
采用这种方式处理,确实可以区分第一次请求和再次单击按扭。但是我很难求出用户的值/

因为我的控件都是用动态方式添加进表格中的。什么时候加入控件是RadioButtonList 或者控件CheckBoxList,根据数据库中的单选题或多选题而定。这两个控件绑定了题库里的题目选项。

#5


如果在if(!IsPostBack)
{
   ....动态添加控件
}
那么我根本无法求出用户输入的值。

而如果我动态添加的控件不写在if(!IsPostBack){}之间,可以求出用户的值,但同时发生了服务器端事件,导致重新对控件进行了随机数运算。
两样都达不到我的要求。晕死!

#6


很多种情况会造成页面提交,包括意外情况。所以不应该在页面提交就计算考试结果,也就是不应该在page_load中回发就开始计算结果。你可以把“交卷”作为一个大大的明显的按钮放到卷子上,点击这个按钮才计算考试结果,并且也就不再接受对考卷修改。

在asp.net中,与传统的winForm编程方式所遵循的事件驱动(而非过程驱动方式)一样,所有操作基本上都应该在具体界面对象对应的事件中去作,不要在装载页面的时候做任何业务操作。装载页面应该只用于显示初始画面以及回发时获取页面状态(这也是一种初始化画面,重建初始化画面之后asp.net才找到对应的控件回填状态和事件等等)。

#7


用脚本把,不刷新提交那种.
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  没有实例化对象

#10


谢谢sp1234(再过半年估计可以抛掉简单的类型观改用范型了)对我的帮助。可以告诉我QQ吗?
我的是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出错