为了账号安全,请及时绑定邮箱和手机立即绑定

将用户控件动态添加到页面会使 UC 内部的控件为空

将用户控件动态添加到页面会使 UC 内部的控件为空

C#
FFIVE 2022-07-23 16:53:11
我需要将 UserControl dynamicaaly 添加到页面上的面板中。UserControl 有一个Repeater,ID 为ARepeater。我在 Page_Init 上加载并添加 UC。我在 UC 的 Init、Load 和 PreRender 事件中检查了 ARepeater 的值,但 ARepeater 始终为空。protected Page_Init(object sender, EventArgs e){  var list = (NameList)Page.LoadControl(typeof(NameList), new object[1] { (int)Type });  Panel1.Controls.Add(list);}NameList.ascx<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="NameList.ascx.cs" Inherits="MyCompant.Controls.BannersList" %>   <asp:Repeater ID="ARepeater" runat="server">      <ItemTemplate>      </ItemTemplate>    </asp:Repeater>我做错了什么?
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

首先,您不需要Page_Init使用动态控件。Page_Load很好。但是为了填充中继器,您可以在 UserControl 中创建一个属性


public partial class WebUserControl1 : System.Web.UI.UserControl

{

    public Repeater _ARepeater

    {

        get

        {

            return ARepeater;

        }

        set

        {

            ARepeater = value;

        }

    }



    protected void Page_Load(object sender, EventArgs e)

    {

    }

然后,您可以使用 UserControl 从页面访问它。


protected void Page_Load(object sender, EventArgs e)

{

    var list = (WebUserControl1)LoadControl("~/WebUserControl1.ascx");

    list.ID = "MyUserControl";

    Panel1.Controls.Add(list);


    list._ARepeater.DataSource = source;

    list._ARepeater.DataBind();

}

或使用 FindControl


var _ARepeater = (Repeater)Panel1.FindControl("MyUserControl").FindControl("ARepeater");

_ARepeater.DataSource = dt;

_ARepeater.DataBind();


查看完整回答
反对 回复 2022-07-23
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您可能不喜欢这个答案,但是Page.LoadControl允许指定控件类型和添加构造函数参数的重载不会将 绑定ascx到代码隐藏,并且所有关联的子控件最终都将为空。

过去,我通过在构建用户控件后添加另一种设置依赖项的方法来解决此问题,但这不是一个理想的解决方案。

那就是说你没有做错任何事。如果您使用 Binding 将正常工作Page.LoadControl("~/path/to/mycontrol.ascx"),但您不会有构造函数注入。

认为问题在于支持类实际上与前端页面没有关系,除非通过将其指定为代码隐藏类的页面指令。没有什么能阻止多个不同的前端使用相同的类作为它的代码隐藏,因此加载通过Type使得很难或完全不可能确定正确ascx的绑定是什么。


查看完整回答
反对 回复 2022-07-23
  • 2 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信