2011-02-07 39 views
1

我有一對由Select Case語句加載的用戶控件。但是,在加載這些控件的主頁的後面代碼文件中,沒有一個asp控件顯示在intellisense中。我有一種感覺,因爲這些控件是有條件加載的。我的問題是解決這個問題的最好方法是什麼?VB.Net 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 
+0

檢查我的更新 – Luke 2011-02-07 19:27:37

回答

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在「load」事件上設置了相同的數據。

您可以在「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 

或預渲染,你想要什麼。

+0

好吧,它加載了控件,我現在唯一的問題是更新它。例如,當我加載控件並訪問用戶控件中的一個控件時,它會給出框中的值。但是,如果我想改變價值,它不會堅持。我會在上面的更新中發佈代碼。謝謝。 – XstreamINsanity 2011-02-07 19:16:29