我想从codebehind创建一些屏蔽的编辑扩展器。类似的东西:
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对我不起作用。
修改:我没有更新面板。事实证明,我还需要在服务器端指定目标控件。
答案 0 :(得分:1)
您的示例未提供TargetControlID。
页面上是否有updatePanel?我在动态创建扩展程序时遇到了问题,因为它们没有被添加到updatePanel内容中。
我还认为你必须使用ScriptManager做一些事情(注册扩展程序)但我可能会弄错(我现在无法访问我做动态扩展程序的代码)。
答案 1 :(得分:1)
如果它在Page子类中,请参见ASP.NET Page Life Cycle Overview。如果向下滚动到事件列表,该页面会建议您使用PreInit事件来创建任何动态控件。有必要尽早做到这一点,以确保ASP.NET在正确的阶段干净地加载ViewState,等等。
但是,如果您在Web用户控件或自定义控件中执行此操作,请覆盖CreateChildControls并在此处执行此操作。
如果没有帮助,请发布更完整的代码示例。
答案 2 :(得分:0)
向MaskedEditExtender提供正确的TargetControlID值