1

我想从代码隐藏中创建许多蒙面编辑扩展器。就像是:

private MaskedEditExtender m_maskedEditExtender;
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    m_maskedEditExtender = new MaskedEditExtender()
    {
        BehaviorID = "clientName"
    };
    m_maskedEditExtender.Mask = "999999999";
    this.Controls.Add(m_maskedEditExtender);
}
protected override void Render(HtmlTextWriter writer)
{
    m_maskedEditExtender.RenderControl(writer);
}

当我这样做时,我在 MaskedEditExtender 的 OnLoad 上收到 NullReferenceException。这样做的正确方法是什么?请注意,将扩展器放入类似中继器的控件中并使用 DataBind 对我不起作用。

编辑:我没有更新面板。原来我还需要在服务器端指定一个目标控件。

4

3 回答 3

1

您的示例未提供 TargetControlID。

页面上有更新面板吗?我在动态创建扩展程序时遇到了问题,因为它们没有被添加到 updatePanel 内容中。

我还认为您必须对 ScriptManager 做一些事情(注册扩展器),但我可能弄错了(我目前无法访问我做动态扩展器的代码)。

于 2008-09-17T13:20:03.630 回答
1

如果这是在 Page 子类中,请参阅ASP.NET 页面生命周期概述。如果您向下滚动到事件列表,该页面会建议您使用 PreInit 事件来创建任何动态控件。有必要尽早这样做,以确保 ASP.NET 在正确的阶段干净地加载 ViewState,等等。

但是,如果您在 Web 用户控件或自定义控件中执行此操作,请覆盖 CreateChildControls 并在其中执行此操作。

如果没有帮助,请发布更完整的代码示例。

于 2008-09-17T13:24:57.597 回答
0

为 MaskedEditExtender 提供正确的 TargetControlID 值

于 2015-10-16T14:51:25.423 回答