ASP.NET动态加载用户控件:ASPxTextBox文本设置失效及跨页引用问题
解决方案
方法一:给用户控件添加公开属性/方法(推荐)
这种方式遵循封装原则,无需直接操作控件内部元素:
- 在ASCX后台代码中添加公开属性或方法:
' ASCX后台代码 Public Property TextBoxText As String Get Return MyTextBox.Text End Get Set(value As String) MyTextBox.Text = value End Set End Property ' 也可以用方法实现 Public Sub SetTextBoxText(text As String) MyTextBox.Text = text End Sub
- 在ASPX后台加载控件后,直接调用属性或方法:
' ASPX后台代码 ' 注意:这里要转成用户控件的具体类型,而非通用UserControl Dim uc = CType(Page.LoadControl("MatterRisk_Probate.ascx"), MatterRisk_Probate) MatterRiskControl.Controls.Add(uc) uc.TextBoxText = "Some Text Here" ' 或调用方法 uc.SetTextBoxText("Some Text Here")
提示:需在ASPX页面顶部添加指令<%@ Reference Control="~/MatterRisk_Probate.ascx" %>,确保页面能识别用户控件的类型
方法二:直接在ASPX后台查找控件
若不想修改用户控件,可通过FindControl逐层查找目标TextBox:
' ASPX后台代码 Dim uc = CType(Page.LoadControl("MatterRisk_Probate.ascx"), UserControl) MatterRiskControl.Controls.Add(uc) ' 查找并转换为DevExpress的ASPxTextBox类型 Dim myTextBox = CType(uc.FindControl("MyTextBox"), DevExpress.Web.ASPxTextBox) If myTextBox IsNot Nothing Then myTextBox.Text = "Some Text Here" End If
修复ASCX中Page_Load不生效的问题
如果ASCX的Page_Load事件未触发,通常是动态加载控件的时机错误。需在Page_Init事件中完成控件加载,保证控件生命周期正常执行:
' ASPX后台的Page_Init事件 Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init Dim uc = CType(Page.LoadControl("MatterRisk_Probate.ascx"), MatterRisk_Probate) MatterRiskControl.Controls.Add(uc) ' 此处也可直接设置文本 uc.TextBoxText = "Some Text Here" End Sub
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

