Похоже, у вас может быть несколько проблем здесь:
Отсутствует тег формы
Убедитесь, что на вашей странице указан тег формы с указанием 'runat = server'.
<form id="form1" runat="server">
<asp:PlaceHolder ID="ph1" runat="server"/>
</form>
Код сзади:
// Create the button control
Button add_img_popup = new Button();
add_img_popup.Text = "Add new Image";
// Add it the placeholder
// (which is inside the form)
ph1.Controls.Add(add_img_popup);
Кнопка, добавляемая в stringbuilder
Добавление элемента управления в строитель строк не приведет к его визуализации. Сначала вам нужно будет отобразить элемент управления в строку, используя что-то вроде этого:
public string RenderControl(Control ctrl)
{
StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctrl.RenderControl(hw);
return sb.ToString();
}
Вы можете использовать метод RenderControl следующим образом:
st.Append("<tr>");
st.Append("<td>");
st.Append(RenderControl(add_img_popup));
st.Append("</tbody>");
st.Append("</table>");
Хотя при этом будет отображаться элемент управления, у вас могут возникнуть проблемы с обработкой события обратной передачи (addImgPopup_Click), так как элемент управления должен быть заново создан при каждой загрузке страницы.
Зачем вам нужно добавлять элемент управления в StringBuilder, а не помещать элемент управления прямо на страницу? Как правило, существуют более эффективные способы достижения цели с использованием существующих элементов управления ASP.NET, а не визуализация чего-либо в строку.