我有一个用户控件,它有一个网格控件。我在aspx页面中使用了两次用户控件。现在我的问题是,它会创建两个具有不同ID的网格控件吗?如果是,我如何访问这两个网格控件?
答案 0 :(得分:0)
如您所料,如果将UserControl放在页面上两次,它将创建两个具有单独ID的实例。它基本上与在页面上放置两个TextBox相同,因为它们也共享同一个类(TextBox),但是创建为具有单独ID的单独实例(例如TextBox1,TextBox2)。
您可以访问CodeBehind文件中UserControl提供的属性或方法,因为您可以访问其他控件类型的属性或方法。如果要访问网格,则必须在UserControl上引入一个属性,以便从父页面访问网格:
Public ReadOnly Property Grid As GridView
Get
Return grid
End Get
End Property
在父页面中,您可以添加与此类似的代码(为了示例,我从父页面隐藏网格):
userCtrl1.Grid.Visible = False
userCtrl2.Grid.Visible = False
但是,就封装而言,如果页面不知道哪个控件放在UserControl上会更清晰。这允许您在不中断页面的情况下更改UserControl。为此,您不必发布网格,而是将所需的属性和方法添加到父页面用于与UserControl交互的UserControl中。网格只能由内部的属性和方法访问:
Public Property ShowDetailData As Boolean
Get
Return grid.Visible
End Get
Set
grid.Visible = value
End Set
End Property
userCtrl1.Grid.ShowDetailData = False
userCtrl2.Grid.ShowDetailData = False
在此示例中,如果您确定Repeater更适合显示数据,则可以在不中断页面的情况下更改此内容。