ASP.NET Как получить доступ к глубоко вложенному пользовательскому элементу управления на родительской странице - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть контроль входа в систему и вложен 2 глубоко в элемент управления заголовка Т.е. страница -> Контроль заголовка -> Контроль входа в систему. Я не могу получить ссылку на элемент управления на странице, используя FindControl. Я хочу иметь возможность установить видимое свойство элемента управления, как

  if (_loginControl != null)
            _loginControl.Visible = false;

Я использовал рекурсивный метод FindControl для поиска вложенного элемента управления.

    public static Control FindControlRecursive(Control root, string id)
    {
        if (root.ID == id)
        {
            return root;
        }

        foreach (Control c in root.Controls)
        {
            Control t = FindControlRecursive(c, id);
            if (t != null)
            {
                return t;
            }
        }

        return null;
    }

Ответы [ 5 ]

0 голосов
/ 12 июня 2014
private List<Control> GetAllNestedUserControl(Control ph)
    {
        List<Control> Get = new List<Control>();
        foreach (var control in ph.Controls)
        {
            if (control is UserControl)
            {
                UserControl uc = control as UserControl;
                if (uc.HasControls())
                {
                   Get =  GetAllNestedUserControl(uc);

                }
            }
            else
            {
                Control c = (Control)control;
                if (!(control is LiteralControl))
                {
                     Get.Add(c);
                }
            }
        }
        return Get;
    }

просто позвоните по этому коду с любой родительской страницы, а затем получите любой контроль с помощью следующего кода

        List<Control> Get = GetAllNestedUserControl(ph);
        Label l = (Label)Get.Find(o => o.ID == "lblusername");
        l.Text = "changed from master";
0 голосов
/ 15 сентября 2010

Элемент управления входом в систему, если он зарегистрирован в разметке, также будет участником вашей страницы codebehind; вы можете ссылаться на него из класса codebehind, как если бы он был обычным членом, используя то же имя, которое вы указали в качестве идентификатора (я рекомендую использовать codebehinds для большей части логики вместо встраивания кода в разметку, кстати).

Вы также можете использовать метод FindControl () вашей страницы, который будет искать в своем поддереве элемента управления элемент с заданным идентификатором. Это занимает больше времени, поэтому я бы порекомендовал первый вариант, если логический элемент управления не добавлен динамически и вы не всегда знаете, что он там есть.

0 голосов
/ 15 сентября 2010

Попробуйте вызвать this.FindControl ("_ loginControl") или this.Page.FindControl ("_ loginControl").

См. MSDN для деталей метода: http://msdn.microsoft.com/en-us/library/system.web.ui.control.findcontrol.aspx

0 голосов
/ 15 сентября 2010

Вам нужно отключить / скрыть пользовательский элемент управления на странице ASP.NET, на которой он находится (или пользовательский элемент управления существует, скажем, на главной странице)? Если он находится на той же странице, то в коде вашей страницы ASP.NET вы должны сделать:

MyUserControlsID.Visible = false

Где MyUserControl - это идентификатор вашего пользовательского элемента управления. Чтобы определить идентификатор вашего пользовательского элемента управления, посмотрите на разметку вашей страницы .aspx, и вы увидите что-то вроде этого:

<uc1:UserControlName ID="MyUserControlsID" runat="server" ... />

Счастливого программирования!

0 голосов
/ 15 сентября 2010

Хорошим способом было бы использовать:

Page.FindControl() 

, если это приводит к нулю, элемент управления отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...