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

如何在ASP.NET自定义控件中访问ITemplate容器的公共属性

问题根因

你遇到的问题由两个配置遗漏导致:

  • 模板实例化时传入的容器类型错误:你在CreateChildControls方法中,给_CustomPanelContainer.InstantiateIn()传入的是原生Panel类的实例,而非你自定义的CustomPanelContainer容器类。页面模板中<%# Container %>实际指向的是你传入的这个原生Panel实例,自然不存在你定义的TextTest属性,所以断点永远不会触发。
  • 数据绑定逻辑未触发:<%# %>是ASP.NET的数据绑定语法,只有对应控件执行了DataBind()方法时,里面的表达式才会被求值执行。

修复步骤

1. 修正控件的模板实例化逻辑

修改CreateChildControls方法,将创建容器的逻辑替换为你自定义的CustomPanelContainer类型,可选补充自动数据绑定逻辑:

protected override void CreateChildControls()
{
    Controls.Clear();
    if (_CustomPanelContainer != null)
    {
        // 替换为自定义容器类,而不是原生Panel
        var p = new CustomPanelContainer();
        p.ID = "CustomPanel";
        Controls.Add(p);
        _CustomPanelContainer.InstantiateIn(p);
        // 可选:在这里主动触发数据绑定,页面侧就不需要手动调用DataBind了
        p.DataBind();
    }
    base.CreateChildControls();
}

2. (可选)页面侧手动触发绑定

如果你没有在控件内部加自动绑定逻辑,需要在页面的生命周期中(比如Page_Load)调用控件的DataBind方法:

protected void Page_Load(object sender, EventArgs e)
{
    Example1.DataBind();
}

修复完成后,<%# Container.TextTest %>就能正常读取到属性值,断点也会正常触发。

内容的提问来源于stack exchange,提问作者Plumbtrician

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:03