【问题标题】:VB.Net ASP: Access controls in a user controlVB.Net ASP:用户控件中的访问控件
【发布时间】:2011-02-07 16:26:42
【问题描述】:

我有几个由Select Case 语句加载的用户控件。但是,在加载这些控件的主页的后台代码文件中,没有一个 asp 控件显示在智能感知中。我有一种感觉,这是因为控件是有条件地加载的。我的问题是解决这个问题的最佳方法是什么?

1) 加载控件并在后面的代码中执行Select Case 以使其隐藏或不隐藏。

2)有没有办法说(伪代码):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

【问题讨论】:

    标签: asp.net vb.net user-controls


    【解决方案1】:

    如果您知道将显示哪些控件,您可以将它们 ctype 到您的控件中

    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
    

    或者在预渲染中,你想要什么。

    【讨论】:

    • 好吧,它加载了控件,我现在唯一的问题是更新它。例如,当我加载控件并访问用户控件中的某个控件时,它会为我提供框中的值。但是如果我想改变这个值,它就不会坚持。我将在上面的更新中发布代码。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多