На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Как получить доступ к контролам страницы , размещенных в пределах других контролов?
    Есть несложная страница (Contacts.aspx) сгенерированная программой Artisteer:
    ExpandedWrap disabled
      <%@ Page Language="C#" MasterPageFile="~/design/MasterPage.master" ValidateRequest="false"
               AutoEventWireup="true" CodeFile="Contacts.aspx.cs" Inherits="_Contacts"
               Title="Контакты" %>
      <%@ Register TagPrefix="artisteer" Namespace="Artisteer" %>
      <%@ Register TagPrefix="art" TagName="ContactsMenu" Src="ContactsMenu.ascx" %>
      <%@ Register TagPrefix="art" TagName="DefaultHeader" Src="DefaultHeader.ascx" %>
      <%@ Reference Page="~/Default.aspx" %>
       
      <asp:Content ID="PageTitle" ContentPlaceHolderID="TitleContentPlaceHolder" Runat="Server">
          Контакты
      </asp:Content>
       
      <asp:Content ID="HeaderContent" ContentPlaceHolderID="HeaderContentPlaceHolder" Runat="Server">
          <art:DefaultHeader ID="DefaultHeader" runat="server" />
      </asp:Content>
      <asp:Content ID="MenuContent" ContentPlaceHolderID="MenuContentPlaceHolder" Runat="Server">
          <art:ContactsMenu ID="ContactsMenuContent" runat="server" />
      </asp:Content>
                              
      <asp:Content ID="SheetContent" ContentPlaceHolderID="SheetContentPlaceHolder" Runat="Server">
          <!-- Этот контрол доступен -->
          <asp:TextBox ID="test1" runat="server"></asp:TextBox>            
          <artisteer:Article ID="Contacts" Caption="" runat="server">
              <ContentTemplate>                
                  <!-- Здесь ошибка доступа -->
                  <asp:TextBox ID="test2" runat="server"></asp:TextBox>            
                  <p></p>                                                                
              </ContentTemplate>
          </artisteer:Article>  
       
      </asp:Content>

    Проблемма в том, что я никак не могу получить доступ к контролам в пределах статьи (artisteer:Article)
    в файле кода (Contacts.aspx.cs):
    ExpandedWrap disabled
              test1.Text = "test1";
              test2.Text = "test2";

    test1 - все нормально (он за пределами тега artisteer:Article), а для test2 выдает ошибку:
    Цитата

    The name 'test2' does not exist in the current context

    Пробовал так:
    ExpandedWrap disabled
              var test2 = (TextBox)Contacts.FindControl( "test2" );
              var test2 = (TextBox)Contacts.ContentPlaceholder.FindControl( "test2" );

    возвращает null.

    Пробовал рекурсивно перебирать все контролы странцы сравнивая ID - тоже ничего.

    Что-то я упускаю. Подскажите, пожалуйста.
    В Asp.net я новичок.
    Сообщение отредактировано: rapido -
      Contacts.GetControl ?
        Цитата Uncle_Bob @
        Contacts.GetControl ?

        Нет такого метода.
        Пробую так:
        ExpandedWrap disabled
              protected Control GetControl( string id )
              {
                  return Contacts.Controls.Cast<Control>().FirstOrDefault( control => control.ID.Equals( id ) );
              }
           
                  var test2 = (TextBox)GetControl( "test2" );
                  test2.Text = "word 2";

        Возвращает null.
          Перебираю все контролы на странице:
          ExpandedWrap disabled
                public static void GetAllControls( this ControlCollection rootControls, List<Control> foundControls  )
                {
                    foreach( Control control in rootControls )
                    {
                        if( control.Controls.Count > 0 )
                            GetAllControls( control.Controls, foundControls );
                        else            
                            foundControls.Add( control );
                    }        
                }

          так
          ExpandedWrap disabled
                    this.Master.Controls.GetAllControls( allControls );

          и так:
          ExpandedWrap disabled
                    this.Controls.GetAllControls( allControls );

          Вот результат:
          Цитата

          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.HtmlControls.HtmlMeta], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.HtmlControls.HtmlLink], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.HtmlControls.HtmlLink], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.HtmlControls.HtmlLink], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.HtmlControls.HtmlLink], ID [faviconLink1]
          type [System.Web.UI.HtmlControls.HtmlLink], ID [faviconLink2]
          type [System.Web.UI.WebControls.ContentPlaceHolder], ID [ScriptIncludePlaceHolder]
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.ResourceBasedLiteralControl], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.WebControls.Label], ID [lblInfo]
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.WebControls.TextBox], ID [test1]
          type [System.Web.UI.LiteralControl], ID []
          type [Artisteer.Article], ID [Contacts]
          type [System.Web.UI.LiteralControl], ID []
          type [System.Web.UI.LiteralControl], ID []

          То есть второго TextBox-а, который размещен в пределах статьи (Artisteer:Article), просто нет.
              [Музыка из мульфильма Айболит]
              Ооой спааасибо Uncle_Bob, оооой спааасибо Uncle_Bob, ооой спааасибо Uuuuncle_Boob!
                Забыл поставить галочку "Вопрос решен".
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0307 ]   [ 16 queries used ]   [ Generated: 7.05.24, 03:21 GMT ]