У меня есть элемент управления списком. Когда пользователь щелкает по нему, он сообщает пользовательскому элементу управления использовать определенный идентификатор.
Пользовательский элемент управления рисует одну и ту же вещь каждый раз (динамически), просто загружает разное содержимое в зависимости от этого идентификатора (он загружается из базы данных в динамическую форму, такую как элемент управления).
Хорошо, теперь у меня проблемы с утечкой в состоянии обзора. Когда вы щелкаете по списку для загрузки, скажем, ID # 1, все будет хорошо выглядеть Затем вы нажимаете на ID # 2, и все элементы управления textbox, созданные внутри пользовательского элемента управления, имеют то же самое, что было вставлено в ID # 1. Поэтому, когда меняется индекс списка, мне нужно очистить состояние просмотра, но я не могу заставить это работать.
Все элементы управления также создаются в Page_Load.
Я попробовал ViewState.Clear () в Page_Load, но ничего не сделал.
У меня был пользовательский элемент управления, производный от INamingInterface, но я думаю, идентификаторы все еще совпадают для viewstate.
Я пытался изменить идентификатор пользовательского элемента управления на что-то уникальное (например, «CONROL _» + id.ToString ()). Я также пытался сделать то же самое с панелью, содержащей пользовательский элемент управления.
Я не могу избавиться от этого состояния просмотра!
EDIT
Хорошо, вот код, который демонстрирует проблему
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (ddl.SelectedValue == "1")
{
Create("ID #1");
}
else if (ddl.SelectedValue == "2")
{
Create("ID #2");
}
}
void Create(string text)
{
TextBox t = new TextBox();
t.Text = text;
pnl.Controls.Add(t);
}
}
разметка:
<div>
<asp:Panel ID="pnl" runat="server">
<asp:DropDownList ID="ddl" runat="server" AutoPostBack="True">
<asp:ListItem Text="id 1" Value="1">
</asp:ListItem>
<asp:ListItem Text="id 2" Value="2"></asp:ListItem>
</asp:DropDownList>
</asp:Panel>
</div>
Если вы запустите этот код, вы заметите, что если вы измените то, что находится в текстовом поле, а затем измените выпадающий список, то то, что вы ввели ранее, будет сохранено там, а не перезаписано.
Моя основная цель состоит в том, чтобы получить его таким образом, чтобы при переходе на ID # 2 он помещал «ID # 2» в текстовое поле независимо от того, что (желательно без полного отключения представления)