Как создать 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 не работает для меня.
Изменить: у меня нет панели обновления. Оказывается, мне также нужно указать целевой элемент управления на стороне сервера.
3 ответа
См. Обзор жизненного цикла страницы ASP.NET, если он находится в подклассе страницы. Если вы прокрутите вниз до списка событий, на этой странице вам будет предложено использовать событие PreInit для создания любых динамических элементов управления. Это необходимо сделать заранее, чтобы убедиться, что ASP.NET безошибочно загружает ViewState на нужном этапе, среди прочего.
Если вы делаете это в веб-пользовательском или пользовательском элементе управления, переопределите CreateChildControls и сделайте это там.
Разместите более полный пример кода, если это не поможет.
Ваш пример не предоставляет TargetControlID.
У вас есть обновление панели на странице? У меня были проблемы с динамическим созданием экстендеров, так как они не были добавлены в контент updatePanel.
Я также думаю, что вы должны сделать что-то с ScriptManager (регистрация расширителя), но я могу ошибаться (у меня нет доступа к коду, который я сделал динамическими расширителями в данный момент).
Укажите правильное значение TargetControlID для MaskedEditExtender