在执行OnInit之前设置属性的asp.net事件

时间:2016-06-22 19:32:24

标签: asp.net vb.net controls page-lifecycle

我有一个Control的子类。这是ColorPicker。我有以下属性:

Private _Color As String
Public Property Color As String
    Get
        Return _Color
    End Get
    Set(value As String)
        _Color = value
    End Set
End Property

我有一个Page_Init事件,其中包含控件的初始化:

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    '...
    If (maintType.FontColor IsNot Nothing) Then
        colorPicker.Color = maintType.FontColor
    End If
    '...
End Sub

我有一个OnInit事件用于控件:

Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
    input = New HtmlInputHidden()
    input.Attributes.Add("class", "hidden-color-value")
    Dim picker = New HtmlGenericControl("div")
    picker.Attributes.Add("class", "picker-color-value")
    picker.Style.Add("width", "220px")
    picker.Style.Add("height", "220px")
    Dim selectedColor = New HtmlGenericControl("div")
    selectedColor.Style.Add("width", "100px")
    selectedColor.Style.Add("height", "100px")
    selectedColor.Style.Add("margin-top", "50px")
    selectedColor.Style.Add("background-color", input.Value)
    selectedColor.Attributes.Add("class", "selected-color")
    input.Value = If(Color Is Nothing, "#000000", Color)
    Me.Controls.Add(input)
    Me.Controls.Add(picker)
    Me.Controls.Add(selectedColor)
    MyBase.OnInit(e)
End Sub

问题是Color属性在input.Value初始化之前用于初始化Property。我试图将内容放入OnPreRender,但这阻止了Control呈现。所以,我的问题是关于应该在控件中添加输入的位置,应该在控件代码中初始化input.Value的位置以及应该设置Color属性的位置。

1 个答案:

答案 0 :(得分:-1)

尝试使用Page_Load,这可以满足您的要求。