ASP.NET派生控件,仅在第一页实例上呈现脚本

时间:2013-11-25 15:33:31

标签: asp.net vb.net viewstate

在我的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

只是要清楚 - 这不是一个回发后的问题,而只是在页面内的控件的第一个实例上呈现脚本(无论是在页面本身还是在用户控件中)。

1 个答案:

答案 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