Элементы пользовательского элемента управления не инициализируются при динамическом добавлении?
У меня есть собственный пользовательский элемент управления ASP.Net, который я построил; делал это достаточно много раз, но этот плохо себя ведет, и я не могу понять, почему.
Там, где на вызывающей странице пользовательский элемент управления находится непосредственно в разметке, все в порядке, и элемент управления работает так, как ожидалось.
Однако, если страница добавляет этот конкретный элемент управления динамически (к заполнителю на главной странице, что и вызывает всю эту вещь), элементы в ней остаются твердо NULL - ничего из пользовательского элемента управления вообще не записывается клиенту, включая статическое содержимое в пользовательском управлении.
Куда я могу пойти не так?
4 ответа
Ответ отсортирован - идентификаторы незначительны, можно обойтись без, но если вы делаете
Control a = new Control;
это не работает, тогда как
Control a = (Control)Page.LoadControl("~/Folder/Control.ascx");
работает то, что я забыл поздно ночью:-)
Когда вы динамически загружаете пользовательский элемент управления...
Для ASP.NET Web Site Project работает следующее
Control a = new Control;
Для ASP.NET Web Application Project работает следующее
Control a = (Control)Page.LoadControl("~/Folder/Control.ascx");
Когда вы добавляете пользовательский элемент управления динамически, вы должны генерировать уникальный идентификатор для каждого добавленного элемента управления.
Например:
Control selWebControl = (Control)Page.LoadControl("~/DL/Templates/FileLibrary.ascx");
selWebControl.ID = "UC" + "_" + dfRow.ID;
Убедитесь, что вы добавляете его в коллекцию элементов управления, которая находится на странице, и убедитесь, что вы делаете это в нужное время на странице LifeCycle. Мне нравится переопределять CreateChildControls.
Поэтому убедитесь, что вы используете Page.Controls.Add(myNewControl) или PlaceHolder1.Controls.Add(myNewControl).
Может помочь, если вы показали код, в котором вы динамически создаете элемент управления и добавляете его на страницу