2012-04-07 5 views
3

Есть ли способ доступа к элементам управления страницы из пользовательского элемента управления. У меня есть некоторые элементы управления на моей странице, и я хочу получить доступ к этим элементам управления из пользовательского элемента управления.Как получить доступ к элементам управления страницы из пользовательского элемента управления?

+9

На самом деле вы этого не делаете - на самом деле вы этого не делаете ... Я согласен с тем, что есть причины, по которым вы можете захотеть (были там, сделали это), но в корне это анти-шаблон - пользовательский элемент управления должен работать изолированно , если данные его потребностей вам нужно передать, если это нужно, чтобы повлиять на вещи вокруг него, то это должно привести к событиям. У вас также есть больше шансов получить что-то, что можно протестировать изолированно. Есть очень мало абсолютов, поэтому ваш прецедент может быть полностью оправданным ... но я бы хотел внимательно изучить, чтобы убедиться. – Murph

ответ

11
YourControlType ltMetaTags = null; 
Control ctl = this.Parent; 
while (true) 
{ 
    ltMetaTags = (ControlType)ctl.FindControl("ControlName"); 
    if (ltMetaTags == null) 
    { 
     ctl = ctl.Parent; 
     if(ctl.Parent == null) 
     { 
      return; 
     } 
     continue; 
    } 
    break; 
} 

Пример

System.Web.UI.WebControls.Literal ltMetaTags = null; 
Control ctl = this.Parent; 
while (true) 
{ 
    ltMetaTags = (System.Web.UI.WebControls.Literal)ctl.FindControl("ltMetaTags"); 
    if (ltMetaTags == null) 
    { 
     if(ctl.Parent == null) 
     { 
      return; 
     } 
     ctl = ctl.Parent; 
     continue; 
    } 
    break; 
} 
0
Parent.FindControl("hdnValue") 
+2

Родитель может быть другим пользовательским контролем. Лучше использовать this.Page. –

+1

@ChrisGessler, ищущий элемент управления на странице, не является автоматической гарантией, чтобы найти то, что вы ищете. Страница является элементом управления, так же как UserControl является элементом управления, а FindControl() - это метод, который будет выполнять поиск только в текущей коллекции Child. Вам нужно сделать рекурсивный поиск, если вы точно не знаете, где в дереве начать поиск http://sharpertutorials.com/recursive-findcontrol/ –

10

Есть на самом деле несколько способов сделать это:

Создать общественную собственность под вашим контролем пользователя

public Button PageButton { get; set; } 

Затем назначьте его на страницы OnInit или OnLoad метод

myUserControl.PageButton = myPageButton; 

Вы можете сделать управление общедоступным и unbox Страница:

public Button PageButton { get { return this.myPageButton; } } 

В пользовательском элементе управления:

MyPage myPage = (MyPage)this.Page; 
myPage.PageButton.Text = "Hello"; 

Самый медленный, но самый простой способ будет использовать FindControl:

this.Page.FindControl("myPageButton"); 
+0

Получить «null refernce exception» '((Этикетка) this.Page .FindControl («mylabel»)). ID; ' –

+0

Я вызываю это на странице загрузки моего пользовательского элемента управления –

+0

@just_name - вам придется опубликовать код для меня, чтобы устранить его, но то, что вы должны работать, ЕСЛИ элемент управления «myLabel» существует на странице, и пользовательский элемент управления также добавлен на страницу. –

1

свою работу для меня:

I объявить ярлык в Моем .aspx страница

<asp:Label ID="lblpage" runat="server" Text="this is my page"></asp:Label> 
    <asp:Panel ID="pnlUC" runat="server"></asp:Panel> 

В .aspx.cs У меня добавить UserControl через Panel

UserControl objControl = (UserControl)Page.LoadControl("~/ts1.ascx"); 
    pnlUC.Controls.Add(objControl); 

и доступ из .ascx в UserControl так:

Page page = this.Page; 
Label lbl = page.FindControl("lblpage") as Label; 
string textval = lbl.Text; 
+0

пользовательский элемент управления, созданный во время выполнения, как этот –

+0

'MyBaseControl ctrl = (MyBaseControl) LoadControl (« UserControls/»+ page_new_name); pnl_PageNew_UC.Controls.Add (ctrl);' ' –

+0

@just_name. Я добавляю usercontrol через панель, чем доступ к значению метки с помощью этого кода. Попробуйте это. – Jigs

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

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