Я надеялся, что кто-то может дать некоторые советы о том, что я делаю неправильно здесь. Я пытаюсь динамически добавить ряд элементов управления DropDownList, которые будут заполнены из базы данных. У меня есть много других DropDownLists, добавленных во время разработки, которые заполняются из базы данных и сохраняют состояние через обратную передачу.Поддерживает состояние динамически добавленного DropDownList C#
Я только испытываю проблемы с динамически добавленными элементами управления. Проблема заключается в том, что элемент управления DropDown заполняется из базы данных при первоначальном создании и возвращается после обратной передачи. (Я установил autopostback в true для элемента управления DropDownList, так что после удаления выбранного элемента происходит обратная передача.)
Я прочитал несколько сообщений и попытался использовать различные стратегии, и до сих пор ничего не работало.
Вот соответствующий код:
У меня есть заменитель, чтобы приложить управление.
<asp:PlaceHolder ID="DynamicControlsHolder" runat="server" />
Я использую переменную сеанса для хранения количества элементов управления (для моего теста я только добавление 1, но нужно будет добавить несколько)
public int NumberOfControls
{
get { return (int)ViewState["NumControls"]; }
set { ViewState["NumControls"] = value; }
}
Я называю два разных метода в зависимости от того, ему является обратной передачей или нет.
if (!IsPostBack)
{
this.NumberOfControls = 0;
addSomeControls();
}
else
{
this.createControls();
}
protected void addSomeControls() //done in original page_load so bind data
{
DropDownList dl = new DropDownList();
//not using the following event handler yet, so I didn't post the code
dl.SelectedIndexChanged += new EventHandler(dlOnSelectedIndexChange);
using (I.DBEntities1 ctx = new I.IDBEntities1())
{
dl.EnableViewState = true;
dl.AutoPostBack = true;
dl.ID = "ControlID_" + NumberOfControls.ToString();
dl.DataSource = ctx.Lk_PersonPersonAssocType.OrderBy(c => c.Assoc_Type);
dl.DataValueField = "ID";
dl.DataTextField = "Assoc_Type";
dl.DataBind();
}
DynamicControlsHolder.Controls.Add(dl);
this.NumberOfControls++;
}
protected void createControls() //postback
{
int count = this.NumberOfControls;
for (int i = 0; i < count; i++)
{
DropDownList dl = new DropDownList();
dl.ID = "ControlID_" + NumberOfControls.ToString();
DynamicControlsHolder.Controls.Add(dl);
}
}
Любая помощь была бы принята с благодарностью.
Я создаю эти элементы управления динамически. Итак, я понимаю, что они больше не существуют после обратной передачи. –
На этот вопрос отвечает количество раз [здесь один wanswer] (http://stackoverflow.com/questions/29073687/asp-net-postback-re-render-already-dynamically-added-controlls/29076146#29076146). Как поддерживать и получать vvaleus из динамически добавленных элементов управления. –
andricadar, это DynamicControlsHolder.FindControl ("ControlID_" + NumberOfControls.ToString()) возвращает значение null для обратной передачи. –