powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как получить доступ к полю
12 сообщений из 12, страница 1 из 1
Как получить доступ к полю
    #38594326
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как получить доступ к полю который находится в родительском контроле (ascx)

Например

Есть контрол ascx который содержит список дочерних ascx контролов, и мне необходимо получить доступ к полю из дочерних контролов

В ascx (Parent)

Код: c#
1.
int idn {get; set;}




В одном из ascx (потомков)

Код: c#
1.
int idParent = this.Parent.idn; //??????????



Спасибо.
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594335
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставьте точку останова в своем методе и посмотрите посредством QuickWatch - что там внутри Parent
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594368
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель,

Не получится так как список ascx контролов находится внутри Repeater и достучатся к HidenField не получается

PARENT

Код: plaintext
1.
<%@ Register Src="~/Controls/Children.ascx" TagName="tc" TagPrefix="ctrl" %>



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
            
<asp:HiddenField ID="idn" runat="server" />

<asp:Repeater ID="rTst" runat="server" OnItemDataBound="rTest_ItemDataBound">
                <ItemTemplate>
                     <ctrl:tc ID="test" runat="server" />
                </ItemTemplate>
            </asp:Repeater>




Children

Код не показываю так как здесь текстовые поля и кнопки

Когда в одном из контролов меняются значения и фиксируются в базе я возвращаю ID записи, и мне необходимо передать этот ID именно в контрол из которого были изменения

Делаю вот так

Код: c#
1.
HiddenField hid = this.Parent.FindControl("idn") as HiddenField; 



Но это не работает так как родитель то Repeater и как достучатся к контролу idn ?????????
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594373
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708родитель то Repeaterа у него родитель есть?
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594383
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель,

Да.


Вот так вот

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<ascx>
  <repeater>
    <item>
      <ascx>Child</ascx>
   </item>
  </repeater
</ascx>
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594390
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаганельVIT2708родитель то Repeaterа у него родитель есть?VIT2708ДаЭто хорошо
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594403
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

ну вообще то исходя из идеологии web forms тебе на событие Item_databound родителя надо осуществлять поиск дочерних ascx, внутри них искать findcontrol и потом изменять значения дочерних
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594415
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrU,

Item_databound отрабатывает у меня только при первом запуске и больше я стараюсь базу не дергать впустую,

А так я уже разобрался
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594450
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаганельПаганельпропущено...
а у него родитель есть?VIT2708ДаЭто хорошо

У меня сейчас получается вот такой код

System.Web.UI.Control ctrl = this.Parent;
System.Web.UI.Control up = ctrl.Parent; //updatepanel
System.Web.UI.Control rpitem = up.Parent; // repeateritems
System.Web.UI.Control rp = rpitem.Parent; //repeater
System.Web.UI.Control ascx = rp.Parent; // сам ascx который мне и нужен

HiddenField hf = ascx.FindControl("hid") as HiddenField;
if (hf != null)
{
}

Может есть способ покороче написать код?
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38594453
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708Может есть способ покороче написать код?можно вместо System.Web.UI.Control писать просто var
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38595043
Tamozhnya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когдато давно написал методы для рекурсивного поиска контролов и всегда ими пользуюсь
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
        public static TControl FindControlRecursive<TControl>(this Control rootControl, string controlID) where TControl : Control {
            var result = rootControl as TControl;
            if(result != null && String.Equals(rootControl.ID, controlID, StringComparison.OrdinalIgnoreCase)) {
                return result;
            }
            foreach(Control controlToSearch in rootControl.Controls) {
                var controlToReturn = FindControlRecursive<TControl>(controlToSearch, controlID);
                if(controlToReturn != null) {
                    return controlToReturn;
                }
            }
            return null;
        }
        public static Control FindControlRecursive(this Control rootControl, string controlID) {
            if(String.Equals(rootControl.ID, controlID, StringComparison.OrdinalIgnoreCase)) {
                return rootControl;
            }
            foreach(Control controlToSearch in rootControl.Controls) {
                Control controlToReturn = FindControlRecursive(controlToSearch, controlID);
                if(controlToReturn != null) {
                    return controlToReturn;
                }
            }
            return null;
        }
        public static TControl FindParentRecursive<TControl>(this Control rootControl) where TControl : Control {
            if(rootControl.Parent is TControl) {
                return (TControl)rootControl.Parent;
            }
            return rootControl.Parent != null ? rootControl.Parent.FindParentRecursive<TControl>() : null;
        }



По поводу репитера, вот пример поиска. e.Item - тоже контрол типа RepeaterItem и содержит внутри себя всё своё дерево.
Код: c#
1.
2.
3.
4.
        protected void MenuListRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) {
            LinkButton linkButton = e.Item.FindControlRecursive<LinkButton>("MenuItemLinkButton");
            HiddenField hdnField = e.Item.FindControlRecursive<HiddenField>("hdnValue");
        }



Если имеем событие в репитере, то берем источник события, ищем рекурсивно вверх RepeaterItem, а от него рекурсивно вниз
берём всё, что нужно
Код: c#
1.
2.
3.
4.
5.
        protected void MenuItemLinkButton_Click(object sender, EventArgs e) {
            LinkButton linkButton = (LinkButton)sender;
            RepeaterItem repeaterItem = linkButton.FindParentRecursive<RepeaterItem>();
            HiddenField hdnField = repeaterItem.FindControlRecursive<HiddenField>("hdnValue");
        }
...
Рейтинг: 0 / 0
Как получить доступ к полю
    #38595556
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tamozhnya,

Спасибо.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как получить доступ к полю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]