Asp.net 如何在类中访问网页控件

Asp.net 如何在类中访问网页控件,asp.net,vb.net,Asp.net,Vb.net,我取了一个div id=“diver”runat=“server” 这是我的网页写的一个类内 Public Class ReceiptInv Inherits System.Web.UI.Page Partial Class MyTimer Private Sub New() End Sub Public Shared timer As New Timer(5000) ' Enable the timer to run Public Shared S

我取了一个div id=“diver”runat=“server”

这是我的网页写的一个类内

Public Class ReceiptInv Inherits System.Web.UI.Page

Partial Class MyTimer
    Private Sub New()
    End Sub

    Public Shared timer As New Timer(5000)

    ' Enable the timer to run
    Public Shared Sub StartRuning()
        AddHandler timer.Elapsed, AddressOf timer_Elapsed
        timer.Start()
    End Sub

    ' This method will be called every 5 seconds
    Private Shared Sub timer_Elapsed(ByVal sender As Object, ByVal e As ElapsedEventArgs)
        Dim TMR As New ReceiptInv

        TMR.DivErr.Visible = False
    End Sub
End Class
End Class
我想让这个潜水员每5秒钟出现一次。 但这是一个错误 TMR.diver.Visible=错误

NullReferenceException Unhandled By Usercode
Object reference not set to an instance of an Object

谁能说出我做错了什么??提前感谢。

您需要获取页面的真实实例,然后才能访问该页面的控件和属性。由于您的方法是
共享的
,因此无法(轻松地)访问当前页面实例的控件

但是您可以尝试通过获取页面实例

但是,为什么该方法需要共享呢?
共享的
计时器由所有请求共享


除此之外,我怀疑您正在尝试每隔5秒钟使控件可见/不可见。这样做行不通,因为您使用的是服务器计时器。您可以使用
ASP.netajax计时器来代替:

每5秒将其设置为可见false。。。??该分区是否在特定时间段后再次显示?你能详细说明一下在
MyTimer
Yes的
constructor
中传递
div
控件的方法吗。。每次出现错误时都会显示此Div,我希望每5秒在Dim page=TryCast(HttpContext.Current.Handler,ReceiptInv)行中显示一次false对象引用未设置为object@Dev:您何时何地调用
StartRuning
?请注意,我已经编辑了我的答案,以使用
CurrentHandler
@Dev:为什么要共享计时器?只是因为将来会有更多的添加。但是我已经删除了Shared并将其替换为Public。@Dev:当然,
MYT
之后什么都不是:
Dim MYT As MyTimer
,为什么不初始化它:
Dim MYT As New MyTimer
?除此之外,我怀疑您正在尝试每隔5秒钟使控件可见/不可见。这样做行不通,因为您使用的是服务器计时器。您可以使用
ASP.NET
-Ajax-Timer来代替:
Private Shared Sub timer_Elapsed(ByVal sender As Object, ByVal e As ElapsedEventArgs)
    Dim page = TryCast(HttpContext.CurrentHandler, ReceiptInv)
    If page IsNot Nothing Then
        page.DivErr.Visible = False 
    End If
End Sub