You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET动态加载用户控件:ASPxTextBox文本设置失效及跨页引用问题

解决方案

方法一:给用户控件添加公开属性/方法(推荐)

这种方式遵循封装原则,无需直接操作控件内部元素:

  1. 在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
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:13:03