【问题标题】:Adding Control to Container Control that is in User Control - How to properly initialize?将控件添加到用户控件中的容器控件 - 如何正确初始化?
【发布时间】:2010-12-07 16:08:36
【问题描述】:

假设我有一个用户控件 MyUserControl,它有一个 容器 控件(它是一个服务器控件,但它可能只是一个面板)和一个下拉列表。下拉列表最初不在容器控件中。在它的代码隐藏中,我重写了 OnInit 并创建了用户控件,其中包括填充下拉列表并将该下拉列表添加到我的容器控件中。我有一个公共财产年,它是一个整数。根据 Year 的值,我想填充下拉列表。问题是在 OnInit 中,年份总是 0。

在 Init 页面上,我正在设置年份,但直到控件的 Init 运行后才会运行。如果我尝试在页面上的 PreInit 上设置值,则页面尚未初始化控件,并且在为控件设置值时得到无效的空引用。

我的问题是:如何正确初始化控件?如何在控件实际初始化之前在页面上设置值?

如果我将控件的代码移到 OnLoad,它会一直工作,直到我必须进行回发。不过,在这种情况下,我需要这样做!

【问题讨论】:

    标签: asp.net user-controls


    【解决方案1】:

    在用户控件的 PreRender 中设置属性。

    我假设您正在注册用户控件正确

    Check the accepted answer here >>>

    【讨论】:

    • 我实际上是在向用户控件上的另一个控件添加控件。我这样做是有原因的,但是假设我有一个占位符控件,并且我在 OnInit 中将控件(包括这个下拉列表)添加到它。如果我在预渲染中添加它们,则在为控件设置 ViewState 时将无法正确创建结构。所以......即使用户选择了索引 7,下拉列表在回发绑定后也会有一个 selectedindex 为 0。
    • @LionelHutz 如果您给出确切的场景,那就太好了。并编辑您的问题以反映这一点。
    • 采纳了您的建议。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多