Ключевым моментом здесь является необходимость повторного создания динамических элементов управления при каждой загрузке страницы. Как только элементы управления будут созданы, ASP.NET сможет заполнить отправленные значения обратно в эти элементы управления. Я включил полный рабочий пример ниже. Обратите внимание, что я добавляю элемент управления в событие OnInit
(которое срабатывает до Page_Load
), а затем я могу прочитать значение обратно в событии Page_Load
, если произошла обратная передача.
<%@ Page Language="C#" AutoEventWireup="true" %>
<html>
<body>
<form id="form1" runat="server">
<asp:Panel ID="myPanel" runat="server" />
<asp:Button ID="btnSubmit" Text="Submit" runat="server" />
<br />
Text is: <asp:Literal ID="litText" runat="server" />
</form>
</body>
</html>
<script runat="server">
protected void Page_Load(object sender, System.EventArgs e)
{
if(Page.IsPostBack)
{
var myTextbox = myPanel.FindControl("myTextbox") as TextBox;
litText.Text = myTextbox == null ? "(null)" : myTextbox.Text;
}
}
protected override void OnInit(EventArgs e)
{
AddDynamicControl();
base.OnInit(e);
}
private void AddDynamicControl()
{
var myTextbox = new TextBox();
myTextbox.ID = "myTextbox";
myPanel.Controls.Add(myTextbox);
}
</script>