2012-04-10 4 views
0

У меня есть главная страница, там есть только один пункт меню и хранилище содержимого. У меня есть другая веб-форма, которая наследует форму этой главной страницы. Как ни малый я поставил все свои элементы управления в хранилище контента. В событии Page_Load моей формы я хочу установить Enabled = false для всех элементов управления выпадающего списка. С этой целью я пишу:ASP.NET - Доступ к элементам управления на дочерней странице

 foreach (Control control in Page.Controls) 
    { 
     if (control is DropDownList) 
     { 
      DropDownList ddl = (DropDownList)control; 
      ddl.Enabled = false; 
     } 
    } 

Но все выпадающие списки остаются включенными. Когда я проверяю счет страницы. Контроль, я вижу только один элемент управления, и это элемент меню главной страницы формы. Что мне делать, чтобы получить список элементов управления, которые находятся в моей текущей форме?

ответ

1

ваш цикл Еогеасп не будет работать в качестве контроля может контролировать ребенка, и они могут также иметь дочерний элемент управления, а затем DDL.

Что я предпочту, это сначала создать список элементов управления, а затем перебрать этот список, который заполнен вашими элементами управления DDL.

public void FindTheControls(List<Control> foundSofar, Control parent) 
{ 
    foreach(var c in parent.Controls) 
    { 
    if(c is IControl) //Or whatever that is you checking for 
    { 
     if (c is DropDownList){ foundSofar.Add(c); } continue; 

     if(c.Controls.Count > 0) 
     { 
      this.FindTheControls(foundSofar, c); 
     } 
    } 
    } 
} 

Позже вы можете напрямую пройти через foundSofar, и он уверен, что он будет содержать все элементы управления DDL внутри него.

1

Вот код, который работал для меня. Вы правы, контроль содержимого недоступен со страницы, поэтому вы используете код Master.FindControl .... Просто не забудьте включить аргумент ContentPlaceHolderID в выражение Master.FindControl («righthere»).

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder)Master.FindControl("MainContent"); 
if(contentPlaceHolder != null) 
{ 
    foreach (Control c in contentPlaceHolder.Controls) 
    { 
     DropDownList d = c as DropDownList; 
     if (d != null) 
      d.Enabled = false; 
    } 
} 
+0

И как мне получить контроль контента? Если это Content content = (Content) Page.FindControl («ContentMain»); то это возвращает null. –

+0

Вы не можете назвать это своим именем? Если он называется ContentMain, это будет ContentMain.Controls – Eugene

+0

, но когда я набираю ContentMain, он не отображается в меню intellisense. –

Смежные вопросы