2008-09-17 4 views
1

Я хочу создать несколько скрытых расширений расширения от codebehind. Что-то вроде:Как создать MaskedEditExtender на лету?

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); 
} 

Когда я делаю это, я получаю NullReferenceException на OnLoad из MaskedEditExtender. Каков правильный способ сделать это? Обратите внимание, что установка расширителя в элемент управления, подобный ретранслятору, и использование DataBind не работают для меня.

Редактировать: У меня нет панели обновления. Оказывается, мне также нужно указать целевой элемент управления на сервере.

ответ

1

См. ASP.NET Page Life Cycle Overview, если это относится к подклассу Страница. Если вы прокрутите список до списка событий, эта страница советует вам использовать событие PreInit для создания любых динамических элементов управления. Это необходимо сделать раньше, чтобы гарантировать, что ASP.NET чисто загружает ViewState на правильной стадии, между прочим.

Если вы делаете это в веб-пользовательском элементе управления или настраиваемом элементе управления, переопределите CreateChildControls и сделайте это там.

Отправьте более полный пример кода, если это не поможет.

1

Ваш пример не предоставляет TargetControlID.

У вас есть updatePanel на странице? У меня были проблемы с динамическим созданием расширителей, поскольку они не добавлялись в контент updatePanel.

Я также думаю, что вам нужно что-то сделать с ScriptManager (зарегистрировать расширитель), но я могу ошибаться (у меня нет доступа к коду, который я делал на динамических расширениях в данный момент).

0

Обеспечить правильное значение TargetControlID для MaskedEditExtender

Смежные вопросы