2011-07-26 92 views
0

最近我處理了一個商業可用的ASP.NET產品,該產品應該未命名。當在代碼中閒逛,我注意到,有用戶控件鑄造,看起來像這樣:Casting UserControl ASP.control_name_ascx vs Control_Name - 優點/缺點?

Dim ctl As ASP.modules_controls_addressinput_ascx = DirectCast(Me.FindControl("AddressInput1"), ASP.modules_controls_addressinput_ascx) 

最近我需要投一個usercontrol其特定的類型,我自己的一個項目,所以我可以訪問它的公共屬性,自然我從上面複製了鑄造方法,因爲我還沒有看到另一種方法來做到這一點。

但是,當使用此類型的投射部署項目時,它會「構建」,但在嘗試「發佈」錯誤「未知類型」時失敗。一些修修補補後,我意識到,聲明類將工作作爲類型如下:

Dim ctl As Modules_Controls_AddressInput = DirectCast(Me.FindControl("AddressInput1"), Modules_Controls_AddressInput) 

當用戶控件聲明如下其ascx.vb文件:

Partial Class Modules_Controls_AddressInput 
    Inherits System.Web.UI.UserControl 

事實上,這也通過發佈解決了這個問題。

我的問題是什麼會迫使別人投第一種方式,第二種方式,特別是當它意味着發佈項目會失敗?

回答

2

我不確定,但第一種方法會將您的控件強制轉換爲asp.net臨時文件夾中的編譯代碼C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ ProjectName但第二種方法會將其轉換爲類本身。在我的工作,我通常使用LoadControl("UserControlPath")創建任何用戶控制

Dim ctrl As MyControl = CType(Page.LoadControl("MyControl.ascx"), MyControl) 
ctrl.Property1 = value1 
ctrl.Property2 = value2 

有關ASP.Net你可以參考這篇文章http://msdn.microsoft.com/en-us/library/ms972975.aspx

+0

感謝您的鏈接的用戶控件的更多進一步的信息的一個實例。 +1,因爲它解釋說這是引用了ASP.NET的臨時文件夾,但你真的沒有回答爲什麼有人願意這樣做,而不是將其轉換爲類本身。 – NightOwl888