最近我处理了一个商业化的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
事实上,这也解决了发布问题。
我的问题是什么会强迫某人投射第一种方式而不是第二种方式,特别是当它意味着发布项目失败时?
答案 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