Получить ascx на aspx - PullRequest
       6

Получить ascx на aspx

1 голос
/ 19 августа 2011

У меня есть UserControl, который состоит из Parent и Child UserControls, который отображается на странице aspx.Мне нужно получить экземпляр Parent UserControls от дочерних элементов управления.Родитель имеет набор вложенных элементов управления .net, и в этих вложенных элементах управления отображаются дочерние элементы управления UserControls, поэтому, если я использую это из дочерних элементов управления UserControls

MyControl _myControl = (MyControl)this.Parent.Parent.Parent.Parent.FindControl("MyControl");

, где (this) = дочерний элемент управления и (Parent.Parent.Parent.Parent) возвращает меня к дереву к настоящему родителю.

Это приведет меня туда, но, кажется, есть лучший способ.Есть предложения?

Ответы [ 2 ]

5 голосов
/ 19 августа 2011

ascx не должен ничего знать о своих родителях: это признак того, что он слишком тесно связан с другими классами. С таким же успехом они могут быть одним классом.

Одной из альтернатив является следование закону Деметры : выясните, что нужно this (вашему пользовательскому элементу управления) из MyControl, сделайте его свойством, и пусть ваш aspx предоставит его, а не спросит за это.

1 голос
/ 19 августа 2011

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

Это может помочь: http://www.asp.net/master-pages/tutorials/control-id-naming-in-content-pages-cs

Еще одна вещь, которую вы можете сделать, если получаете доступ к значению из элемента управления на родительской странице, - поместить это значение в HttpContext.Current.Items ["MyControlValue"] при загрузке страницы. Таким образом, ваш пользовательский контроль может легко получить это значение

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