ASP.NET 4.0. Я хочу разрешить пользователям просматривать/редактировать элементы по лицензии клиента. Лицензия имеет 1-M продукцию, и список продуктов будет расширяться с течением времени, поэтому я динамически создаю список всех продуктов (в Page_Load) с помощью флажка, чтобы указать, имеет ли лицензия этот продукт, например:Динамически созданные элементы управления теряют значения
CheckBox cbxProduct = new CheckBox();
cbxProduct.ID = "cbxProduct" + product.ID.ToString();
я могу найти эти динамические элементы управления и получить доступ к их ценности на PostBack с помощью:
CheckBox cbxProd = (CheckBox)pnlLicenseDetails.FindControl("cbxProduct" + productID.ToString());
, но только если они только что были созданы заново в Page_Load (или Page_Init, кажется, не имеет значения). Проблема в том, что я хочу, чтобы пользователь мог снять флажок, чтобы удалить продукт из лицензии, а затем сохранить результаты. Но чтобы найти флажок и определить его значение, мне нужно заново создать элементы управления, которые, конечно, стирают любое значение, введенное пользователем.
Если я попытаюсь ссылаться на флажки без их повторного создания, я, конечно, получаю ошибку «ссылка на объект не установлен ...». Поэтому мне нужно каким-то образом зафиксировать значения, которые вводит пользователь, прежде чем они будут уничтожены.
Предложения?
Спасибо, @ matt-dot-net. Можете ли вы объяснить альтернативу FindControl? Я не уверен, что вы имеете в виду под частной переменной-членом. – SteveEx
BTW, я настроил его так, чтобы функция BuildControls вызывалась в Page_Init, независимо от PostBack. Ошибка «ссылка на объект» сохраняется при попытке сохранить изменения пользователя. Если я вызову BuildControls из события SaveChanges, я пройду мимо него, но получаю сообщение об ошибке, заявив, что несколько элементов управления имеют одинаковый идентификатор, очевидно, поскольку BuildControls также находится в Page_Init. – SteveEx
Эта идея словаря была серебряной пулей, которую я искал. Спасибо, @ matt-dot-net! – SteveEx