【发布时间】:2016-10-24 21:51:49
【问题描述】:
我有一个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属性在Property初始化之前用于input.Value的初始化。我试图将东西放入OnPreRender,但这阻止了Control 的渲染。所以,我的问题是关于应该在控件中添加输入的位置,应该在控件代码中初始化input.Value 的位置以及应该设置 Color 属性的位置。
【问题讨论】:
-
我曾经通过在 ASPX 页面中添加这些值来将输入参数传递给控件;
<cc1:mycontrol ID="control" runat="server" mycustomprop="val"/>;我不确定你是否有相同的! -
从数据库中读取值。在编写代码时无法预先确定颜色。
-
您的
Control Class中的Constructor怎么样?我已经为那里的控件添加了一些真正的自定义!! -
这是一个有趣的想法。我目前正在将控件放入标记中,但这绝对是一个选择。我将沿着这些思路进行实验。
标签: asp.net vb.net controls page-lifecycle