Asp.net 在VB.net中,数组和变量在结束子对象后自行清除
我正在ASP.net中编写一个times tables程序,我需要一些帮助。我遇到的问题是,当按钮子结束,屏幕再次弹出供用户输入时,所有数组和变量现在都设置为nothing或0 有没有办法在子结束后保留变量的所有值并在以后使用它们 任何帮助都将不胜感激Asp.net 在VB.net中,数组和变量在结束子对象后自行清除,asp.net,vb.net,Asp.net,Vb.net,我正在ASP.net中编写一个times tables程序,我需要一些帮助。我遇到的问题是,当按钮子结束,屏幕再次弹出供用户输入时,所有数组和变量现在都设置为nothing或0 有没有办法在子结束后保留变量的所有值并在以后使用它们 任何帮助都将不胜感激 Public Class PickTimesTables Inherits System.Web.UI.Page Dim count As Integer = 0 Dim NumberQ As Integer D
Public Class PickTimesTables
Inherits System.Web.UI.Page
Dim count As Integer = 0
Dim NumberQ As Integer
Dim RandomN As Integer
Dim FirstNumber() As Integer
Dim FirstNumberTemp() As Integer
Dim SecondNumber() As Integer
Dim correctAnswers As Integer
Dim inc As Integer = 0
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
PanelQuestion.Visible = False
PanelAnalysis.Visible = False
End Sub
Protected Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
PanelQuestion.Visible = True
lblOperator.Text = "X"
If chktimes1.Checked = False And chktimes2.Checked = False And chktimes3.Checked = False And chktimes4.Checked = False And chktimes5.Checked = False And chktimes6.Checked = False And chktimes7.Checked = False And chktimes8.Checked = False And chktimes9.Checked = False And chktimes10.Checked = False And chktimes11.Checked = False And chktimes12.Checked = False Then
MsgBox("Pick a Times Table to be Tested for..")
ElseIf txtNoQuestion.Text = "" Then
MsgBox("Pick the Number of Question for the test")
Else
NumberQ = txtNoQuestion.Text
count = 0
If chktimes1.Checked Then
count = count + 1
End If
If chktimes2.Checked Then
count = count + 1
End If
If chktimes3.Checked Then
count = count + 1
End If
If chktimes4.Checked Then
count = count + 1
End If
If chktimes5.Checked Then
count = count + 1
End If
If chktimes6.Checked Then
count = count + 1
End If
If chktimes7.Checked Then
count = count + 1
End If
If chktimes8.Checked Then
count = count + 1
End If
If chktimes9.Checked Then
count = count + 1
End If
If chktimes10.Checked Then
count = count + 1
End If
If chktimes11.Checked Then
count = count + 1
End If
If chktimes12.Checked Then
count = count + 1
End If
If txtNoQuestion.Text = 0 Then
MsgBox("You cannot have a test with 0 Questions")
Else
ReDim FirstNumberTemp(count - 1)
For i = 0 To count - 1
If chktimes1.Checked Then
FirstNumberTemp(i) = 1
chktimes1.Checked = False
ElseIf chktimes2.Checked Then
FirstNumberTemp(i) = 2
chktimes2.Checked = False
ElseIf chktimes3.Checked Then
FirstNumberTemp(i) = 3
chktimes3.Checked = False
ElseIf chktimes4.Checked Then
FirstNumberTemp(i) = 4
chktimes4.Checked = False
ElseIf chktimes5.Checked Then
FirstNumberTemp(i) = 5
chktimes5.Checked = False
ElseIf chktimes6.Checked Then
FirstNumberTemp(i) = 6
chktimes6.Checked = False
ElseIf chktimes7.Checked Then
FirstNumberTemp(i) = 7
chktimes7.Checked = False
ElseIf chktimes8.Checked Then
FirstNumberTemp(i) = 8
chktimes8.Checked = False
ElseIf chktimes9.Checked Then
FirstNumberTemp(i) = 9
chktimes9.Checked = False
ElseIf chktimes10.Checked Then
FirstNumberTemp(i) = 10
chktimes10.Checked = False
ElseIf chktimes11.Checked Then
FirstNumberTemp(i) = 11
chktimes11.Checked = False
ElseIf chktimes12.Checked Then
FirstNumberTemp(i) = 12
chktimes12.Checked = False
End If
Next
ReDim FirstNumber(NumberQ - 1)
For i = 0 To NumberQ - 1
Randomize()
RandomN = FirstNumberTemp(Int(Rnd() * count))
FirstNumber(i) = RandomN
Next
ReDim SecondNumber(NumberQ - 1)
For i = 0 To NumberQ - 1
Dim rn As New Random(Now.Millisecond)
RandomN = rn.Next(1, 13)
SecondNumber(i) = RandomN
Next
lblFirstN.Text = FirstNumber(0)
lblSecondN.Text = SecondNumber(0)
End If
End If
End Sub
Protected Sub txtInput_TextChanged(sender As Object, e As EventArgs) Handles txtInput.TextChanged
NumberQ = txtNoQuestion.Text
If txtInput.Text = FirstNumber(inc) * SecondNumber(inc) Then
lblFirstN.Text = FirstNumber(inc + 1)
lblSecondN.Text = SecondNumber(inc + 1)
correctAnswers = correctAnswers + 1
txtInput.BackColor = Drawing.Color.Green
Else
txtInput.BackColor = Drawing.Color.Red
lblFirstN.Text = FirstNumber(inc + 1)
lblSecondN.Text = SecondNumber(inc + 1)
End If
End Sub
End Class
它们都将被重置,因为这是web的无状态特性。它们不会保留它们的值,因为以后每次您查看该页面(或使用调试器逐步查看该页面)时,它都是一个新请求
您应该使用google在ViewState或会话中存储asp.net变量,即ViewState支持的属性。这是asp.net Webforms新手的常见错误。有这样一种想法,您的页面类实例在整个会话中存在,用于用户在浏览器中与页面的所有交互这不会发生。与页面的任何交互都会导致触发事件,从而创建从客户端到服务器的新回发,并且每次回发都使用page类的全新实例。当用户在浏览器中看到您的页面时,您用于为该视图呈现html的任何页面对象都已被销毁并被垃圾回收 您可以做一些事情来解决这个问题,比如在会话、URL或ViewState中添加变量,但通常您需要完全重新考虑您的方法,以使网站更自然 此外,您还需要重新考虑在VB.Net代码中处理TextChanged事件。一般来说,TextChanged事件需要在25-40毫秒内返回给用户,否则视图会感觉非常缓慢。当程序在用户的计算机上运行,并且具有工作站的所有内存和CPU能力时,这通常不是问题。对于web站点来说,情况完全不同,在请求到达服务器之前,您可能会有80毫秒的延迟,而在进行任何处理之前,响应可能会有80毫秒的延迟,服务器会共享其CPU和内存资源,以支持尽可能多的用户 相反,应该考虑使用javascript事件进行处理,并且只有在用户最终尝试提交或保存最终结果时才验证VB.Net代码中的文本
最后,对
MsgBox()
函数的调用也需要进行。它似乎只能在您的系统上工作,因为您的web服务器与web浏览器位于同一台机器上。当您实际将其放在一个真正的服务器上并从其他位置进行测试时,这些消息将显示在服务器上,而不是用户的web浏览器中 很抱歉,我的回复太晚了,但我正在做一个乘法程序,可以让用户测试他们的技能,我需要这个程序输出第一个等式,然后让用户输入答案。这将触发textchanged处理程序并执行计算。有没有其他不使用textchanged处理程序的方法呢?在JavaScript中完成这一部分