【问题标题】:asp.net event to set property before OnInit is executed在执行 OnInit 之前设置属性的 asp.net 事件
【发布时间】: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


【解决方案1】:

试试 Page_Load,这将满足您的要求。

【讨论】:

  • 我对此表示怀疑,因为 Page_Load 将比 Page_Init 执行得更晚,而且 Page_Init 也为时已晚。
  • 尝试将颜色设置为负载,所有属性都已正确加载。
  • MoustafaS,因为你问我我试过了,但它没有产生你期望的结果。原因是 Page_Init 执行赋值太晚了,Page_Load 执行得更晚了。
  • 对不起,尝试了很多次,我的意思是只留下颜色初始化来加载页面,或者添加一个只初始化颜色的函数,然后在从加载后调用它页面,类似 colorPicker.SetColor("#123456") 并将其添加到控件本身,此函数将检查 foreach(var c in this.Controls) if(c is HtmlInputHidden) c.value = "color";跨度>
  • 感谢您的帮助,但不幸的是,这已经尝试过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多