我有一些由Select Case
语句加载的用户控件。但是,在加载这些控件的主页的后台代码文件中,没有任何asp控件出现在intellisense中。我有一种感觉,因为控件是有条件加载的。我的问题是解决这个问题的最佳方法是什么?
1)加载控件并在后面的代码中执行Select Case
以隐藏它们。
2)有没有办法说(psuedocode):LoadUserControl("UserControl1").Controls("tbTest").Text = ""
3)如何将数据集传递给用户控制文件?
4)还有其他想法吗?
感谢。
这允许我在子控件中加载控件和访问值。但是,更新似乎不起作用。有什么想法吗?
Private Sub SetFrequencyValues(ByVal frequency As Integer)
Select Case frequency
Case 2
Dim userControl As Minutes = CType(LoadControl("Frequency/Minutes.ascx"), Minutes)
Dim tb As TextBox = userControl.FindControl("tbMinutes")
tb.Text = "10"
tb.Visible = False
Case(4)
Case 5
Case 6
End Select
End Sub
答案 0 :(得分:1)
如果您知道将显示哪些控件,您可以将其键入控件
dim uc as MyUserControl = cType(LoadUserControl("UserControl1"), MyUserControl)
并且您的MyUserControl可能有一些您可能想要设置的属性
MyUserControl.Data = mySelectedData
如果你没有相同的控件,你可以考虑使用接口
Public Interface IDataForUserControl
Public Property Data as Object
End Interface
然后你可以实现这个接口,如果加载它,你可以尝试将它转换为接口。
如果您没有这两种可能性,可以使用ITemplates和NamingContainers。
Dim control as new MyNamingContainerThatImplementsIDataItem
LoadTemplate("UserControl1").instantiateIn(control)
您可以在UserControl1中使用DataBinder访问数据。
回复您的更新
某处可能有一些压倒一切。你什么时候打电话给你的更新功能?也许mintues.ascx在“加载”事件或类似事件上设置相同的数据。
您可以在“userControl”中创建一个您将在SetFrequencyValues方法中访问的方法,然后它可能不再被触摸。或者您处理用户控件的某些事件
dim userCOntrol as Minutes = Loadcontrol("Minutes.ascx")
AddHandler userControl.load, sub(sender as Minutes, e as eventargs)
sender.mytextbox.text = "10"
end sub
或者预渲染,你想要什么。