我正在尝试将页面中的标签公开给用户控件。所以我决定在我的用户控件中创建一个公共属性,然后在页面中设置该属性。
在我的用户控件中,我有这个公共属性:
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的行上。我知道该对象存在于页面中,但我认为该对象没有被正确地暴露给用户控件。
关于如何正确地做到这一点的任何想法?
由于
答案 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触发事件,并让页面处理该事件并更新标签本身。