转换用户控件ASP.control名称ascx vs Control_Name - 优点/缺点?

时间:2011-07-26 08:59:42

标签: asp.net user-controls casting

最近我处理了一个商业化的ASP.NET产品,该产品将被命名为。在代码中查找时,我注意到有一个usercontrol强制转换,如下所示:

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

最近我需要在我自己的一个项目中将usercontrol转换为其特定类型,这样我就可以访问它的公共属性了,我自然也从上面复制了转换方法,因为我还没有看到另一种方法。< / p>

但是,当使用这种类型的转换部署项目时,它将“构建”,但是当我尝试使用错误“未知类型”“发布”时失败。经过一些修补,我意识到声明的类的类型将如下工作:

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

userctrol在ascx.vb文件中声明如下:

Partial Class Modules_Controls_AddressInput
    Inherits System.Web.UI.UserControl

事实上,这也解决了发布问题。

我的问题是什么会强迫某人投射第一种方式而不是第二种方式,特别是当它意味着发布项目失败时?

1 个答案:

答案 0 :(得分: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