Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [asp.net] Custom Control Property As Control, передать ссылку на другой контрол 
V
    Опции темы
Mymik
Дата 7.1.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



    Вобщем пишу я тут custom control и возникла у меня такая проблема: Одно из свойств этого контрола должно быть указатель на другой контрол.
    Я не долго думая стал по аналогии передавать в этот контрол string в виде ID контрола, который мне нужен и дальше при работе я просто писал Page.FindControl("<id controla>"), но как только я начал использовать контрол в более сложной связке (MasterPage, Page, UserControl) то он "внезапно" перестал работать smile Вот я и думу-думаю, как бы мне такую штуку реализовать smile пытался через this.Parent.FindControl() но что-то Parent в моем случаи указывал на MasterPage контрол и следовательно там я находил только два ContentPlaceHolder контрола и следовательно я ничего не находил.
Вобщем подсобите smile


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 7.1.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 5
Всего: 232



А из ContentPlaceHolder можно вытянуть/кастовать UserControl, или Content с юзерконтролом, или как-то ещё ?...


--------------------
user posted image
PM MAIL WWW   Вверх
tol05
Дата 7.1.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Mymik, я не понял проблемы. Какой контрол, где ты его юзаешь и как?.. Можно немного кода?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Mymik
Дата 7.1.2008, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(mr.DUDA @  7.1.2008,  12:48 Найти цитируемый пост)
А из ContentPlaceHolder можно вытянуть/кастовать UserControl, или Content с юзерконтролом, или как-то ещё ?... 

Можно, но я получаю указатель не на ContentPlaceHolder, а на MasterPage в целом, а если таки ContentPlaceHolder'ов десяток... и в каком из них мне надо искать мой конторол ??? причем он может находится в десятом Сhild Control'е  а просматривать все древо объектов я не хочу :( уж слишком глупое это дело, я не верю, что так DataSourceID у GridView ищит поставшик данных по всему древу объектов

Цитата(tol05 @  7.1.2008,  14:06 Найти цитируемый пост)
Mymik, я не понял проблемы. Какой контрол, где ты его юзаешь и как?.. Можно немного код
 К сожалению код не могу сейчас дать, потому как этот код на работе (это кастумизация HyperLink под ICallbackHandler, а asp.net ajax мне не захотелось использовать по причине громоздкости для столь маленькой задачи как HyperLink).
Если задать этот вопрос более конкретно и сжато, то мне надо просто передать один контрол в другой контрол непосредственно в xml разметке, а не в behind-code.



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 8.1.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 5
Всего: 232



Mymik, ну тогда только если через статическую переменную... А-ля Dictionary<string, Control> куда запихивать this каждого контрола в его конструкторе, по имени контрола. Криво конечно, но будет работать.


--------------------
user posted image
PM MAIL WWW   Вверх
tol05
Дата 8.1.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



поскольку я так и не понял, что ты имел в виду, Mymik, то я наваял пример связки двух контролов через разметку. 
Немного кривой (в design-time студия не связывает). Надо книжки читать - да лень  smile

Есть кастом контрол - наследник от Button. Контол содержит ссылку на гиперлинк, обеспечивает к нему доступ и т.д. Короче - пример прост и понятен, комментарии излишни. Работает как на автономной странице, так и на странице контента.
проект MeControls.dll
Код

using System;
using System.Web.UI.WebControls;

namespace MyControlsNamespace
{
   public class MyButton : Button
    {
        private HyperLink link;
        private string linkId;
    
        public string LinkID
        {
            get
            {
                return linkId;
            }
            set
            {
                linkId = value;
            }
        }

        public HyperLink Link
        {
           get
           {
               link = FindControl(linkId) as HyperLink;
               if(link == null)
               {
                   throw new ArgumentException("Control doesn't have the link");
               }
               return link;
           }
        }
    }
}

страница контента Default2.aspx
Код

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="Untitled Page" %>

<%@ Register Assembly="MyControls" Namespace="MyControlsNamespace" TagPrefix="cc1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <div>
        <asp:HyperLink ID="Link2" runat="server" Text="Simple link"/>
        <cc1:MyButton ID="MyButton1" runat="server" LinkID="Link2" Text="MyBytton" OnClick="MyButton1_Click1"/>
    </div>
</asp:Content>

Default2.aspx.cs
Код

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default2 : System.Web.UI.Page
{
    protected void MyButton1_Click1(object sender, EventArgs e)
    {
        MyButton1.Link.Text = "The MyButton was pressed!!!!";
    }
}



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Mymik
Дата 9.1.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



да, все правильно... спасибо за помощь. smile 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
oshd
Дата 9.1.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.1.2008

Репутация: нет
Всего: нет



см. в reflector System.Web.UI.WebControls.DataBoundControlHelper.FindControl, этот метод используют DataBoundControl's
для поиска по DataSourceID, его код copy-paste:

Код

public static Control FindControl(Control control, string controlID)
{
    Control namingContainer = control;
    Control control3 = null;
    if (control != control.Page)
    {
        while ((control3 == null) && (namingContainer != control.Page))
        {
            namingContainer = namingContainer.NamingContainer;
            if (namingContainer == null)
            {
                throw new HttpException(SR.GetString("DataBoundControlHelper_NoNamingContainer", new object[] { control.GetType().Name, control.ID }));
            }
            control3 = namingContainer.FindControl(controlID);
        }
        return control3;
    }
    return control.FindControl(controlID);
}


p.s.
кстати, что работало в дизайнтайме нужен атрибут, например:
[IDReferenceProperty(typeof(DataSourceControl))]


Это сообщение отредактировал(а) oshd - 9.1.2008, 17:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.