2011-04-28 49 views
0

我有這樣它加載從.ascx文件控制代碼,調用控制的一些方法,然後呈現它:只有如何引用用戶控件的「強」型

Option Explicit Off 

Sub renderMyControl(p As Page) 
    Dim ctrl as Object = p.LoadControl("path/to/myControl.ascx") 
    ' ... do stuff with ctrl ... 
    ctrl.DoThing1() 
    ' ... 
    ctrl.RenderControl(New HtmlTextWriter(p.Response.Out)) 
End Sub 

此代碼因爲Explicit已關閉。我想使用CType將控件轉換爲其「強類型」(並擺脫Option Explicit Off),但我不知道如何添加對該類型的引用。我怎樣才能做到這一點?

+0

所以,你問如何找出什麼類型' 「路徑/到/ myControl.ascx」'是什麼?你不是作者嗎? System.Reflection想到。 – Jodrell 2011-04-28 12:21:30

+0

@Jodrell,我是作者......我不能使用反射,因爲我想讓編譯器知道類型,所以它可以檢查用戶控件的方法和屬性名稱,並且可以關閉Option Explicit。事實上,它只是在運行時在編譯時沒有進行檢查。 – JoelFan 2011-04-28 12:24:35

+0

因此,添加一個對包含名爲myControl的Web用戶控件的程序集的引用,這是不可能的?該項目是否在相同的解決方案?在VB中,它們列在項目屬性下,而不是在解決方案資源管理器中,但仍然可以在項目的上下文菜單中找到該選項。我錯過了這一點嗎? – Jodrell 2011-04-28 12:32:40

回答

0

VB.NET或C#?我想你已經把你的樣品混淆了一下。 :)

這將工作 - 在VB.NET:

Sub renderMyControl(ByVal p As Page) 
    Dim ctrl = CType(p.LoadControl("myControl.ascx"), myControl) 
    ctrl.DoThing1() 
    ctrl.RenderControl(New HtmlTextWriter(p.Response.Output)) 
End Sub 
+0

我不問如何使用CType ...我問「我該如何添加一個引用」類型「 。如果沒有任何引用,我會因'myControl'無法識別而導致構建錯誤 – JoelFan 2011-04-28 11:36:37

+0

myControl用戶控件是否有代碼隱藏類?我創建了一個測試項目並添加了一個名爲「myControl」的Web用戶控件,並且上面的代碼正常工作。也許你的myControl類隱藏在某個地方的命名空間中?順便說一句。您的示例仍有分號和C#樣式註釋。 :) – 2011-04-28 12:14:10

+0

我修正了語法(我正在顯示一個經常切換語言的開發人員的跡象:)我會嘗試一次,一旦我開始工作,並讓你知道我得到的錯誤 – JoelFan 2011-04-28 12:17:37