0

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

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

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 的那一行。我知道该对象存在于页面中,但我认为该对象没有正确地暴露给用户控件。

关于如何正确执行此操作的任何想法?

谢谢

4

1 回答 1

1

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

lblTestLabel不是标签的实例。您需要为属性定义一个底层变量来对应,然后调用该变量的 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 触发一个事件,让页面处理该事件并更新标签本身。

于 2013-02-21T21:27:52.447 回答