Вопрос по user-controls, c#, asp.net – Как получить доступ к элементам управления страницы из пользовательского элемента управления?

3

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

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

Ваш Ответ

4   ответа
13
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;
}
Спасибо, спасибо за этот полезный совет. Хорошо работает человек.
1

its work for me :

Я объявляю ярлык в моем.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;
@just_name. Я добавил usercontrol через панель, чем смог получить доступ к значению метки с помощью этого кода. Надеюсь попробовать это.
MyBaseControl ctrl = (MyBaseControl)LoadControl("UserControls/" + page_new_name);pnl_PageNew_UC.Controls.Add(ctrl); ` Anyname Donotcare
пользовательский элемент управления, созданный во время выполнения, как это Anyname Donotcare
10

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

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

public Button PageButton { get; set; }

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

myUserControl.PageButton = myPageButton;

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

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

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

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

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

this.Page.FindControl("myPageButton");
@just_name - также обратите внимание, что & quot; myLabel & quot; должен быть элементом управления на стороне сервера, а не & lt; label id = "myLabel" / & GT; & Quot;
@just_name - начните новый вопрос или отредактируйте его и включите ваш исходный код.
Получитьnull refernce exception ((Label)this.Page.FindControl("mylabel")).ID; Anyname Donotcare
Я называю это на странице загрузки моего пользовательского элемента управления Anyname Donotcare
@just_name - вам придется опубликовать код для меня, чтобы устранить его, но то, что у вас есть, должно работать, ЕСЛИ элемент управления "myLabel" существует на странице, и пользовательский элемент управления также был добавлен на страницу.
1
    Parent.FindControl("hdnValue")
@ChrisGessler, ищущий элемент управления на странице, не является автоматической гарантией того, что вы найдете то, что ищете. Страница - это элемент управления, точно так же, как UserControl - это элемент управления, а FindControl () - это метод, который будет выполнять поиск только в текущей дочерней коллекции. Вам нужно выполнить рекурсивный поиск, если вы не знаете точно, где в дереве начать поискsharpertutorials.com/recursive-findcontrol
Родитель может быть другим пользовательским элементом управления. Лучше использовать это. Страница.

Похожие вопросы