在我的ASP.NET 4.0 Web应用程序中,我有一个派生自标准ASP.NET <asp:TextBox>
的类。此类需要添加客户端脚本,但即使页面上有多个控件实例,也只需要将脚本添加到页面一次。
由于我无法访问页面的ViewState,因此最佳做法是确保只有第一个控件将脚本呈现给页面。
我不能使用静态变量,因为我显然需要它是每页...而不是每个会话/应用程序。
这大致是我现在所拥有的......
Public Class MyTextBox
Inherits TextBox
Private Sub MyTextBox_PreRender(sender As Object, e As System.EventArgs) Handles Me.PreRender
Dim script As String = "window.alert('Hello World');"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "myscript", script, True)
End Sub
End Class
只是要清楚 - 这不是一个回发后的问题,而只是在页面内的控件的第一个实例上呈现脚本(无论是在页面本身还是在用户控件中)。
答案 0 :(得分:2)
您可以使用ClientScript.IsStartupScriptRegistered
检查它是否已注册:
Public Class MyTextBox
Inherits TextBox
Private Sub MyTextBox_PreRender(sender As Object, e As System.EventArgs) Handles Me.PreRender
If Not Page.ClientScript.IsStartupScriptRegistered("AlertHelloWorld") Then
Dim alertHelloWorld = "window.alert('Hello World');"
Page.ClientScript.RegisterStartupScript(GetType(MyTextBox), "AlertHelloWorld", alertHelloWorld, True)
End If
End Sub
End Class