通过属性将对象暴露给用户控件

时间:2013-02-21 20:42:45

标签: asp.net .net vb.net

我正在尝试将页面中的标签公开给用户控件。所以我决定在我的用户控件中创建一个公共属性,然后在页面中设置该属性。

在我的用户控件中,我有这个公共属性:

Public Property lblTestLabel As Label

然后我这样做:

lblTestLabel.Attributes.CssStyle.Add("Display", "inline")

在我的包含用户控件的页面中,我这样做:

ucTestUserControl.lblTestLabel = lblRealLabel

但我一直收到这个错误:

Object reference not set to an instance of an object.

在我尝试设置CssStyle的行上。我知道该对象存在于页面中,但我认为该对象没有被正确地暴露给用户控件。

关于如何正确地做到这一点的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

你无法以这种方式调用方法。属性不是变量,它只是一个数据元素。

lblTestLabel不是Label的实例。您需要为要对应的属性定义基础变量,然后对变量调用Add()方法,而不是属性本身。

Dim _lblTestLabel As Label
_lblTestLabel = New Label   ' This goes in your constructor, not here
Public Property lblTestLabel As Label
    Get          
        _lblTestLabel.Attributes.CssStyle.Add("Display", "inline")
        return _lblTestLabel
    End Get
    Set (value As Label)
        _lblTestLabel = value
    End Set
End Property

尽管如此,语句ucTestUserControl.lblTestLabel = lblRealLabel仍会覆盖该属性的标签,因此您对.Add()的调用甚至无关紧要。

这一切都是无关紧要的,因为这里的主要问题是这是处理这种行为的非常糟糕的方式。您应该在此处使用事件和事件处理程序:让UserControl触发事件,并让页面处理该事件并更新标签本身。