Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > findcontrol


Автор: hasbah 26.10.2010, 12:46
нужно поймать div в listview
aspx.vb:

Код

Dim item As PlaceHolder = CType(lst_cont.FindControl("lst_cont"), PlaceHolder)
Dim div As HtmlControls.HtmlContainerControl = CType(item.FindControl("div_repair"), HtmlControls.HtmlContainerControl)
div.Visible = False



aspx:
Код

 <asp:ListView ID="lst_cont" runat="server" ItemPlaceholderID="lst_PlaceHolder_cont">
                    <LayoutTemplate>
                        <asp:PlaceHolder ID="lst_PlaceHolder_cont" runat="server"></asp:PlaceHolder> 
                    </LayoutTemplate>
                    <ItemTemplate>
                        <div class="content_middle_all">
                             <div runat="server" id="div_repair"> 
                                  111
                             </div>
                        </div>
                    </ItemTemplate>
                </asp:ListView>


ошибка, которую он выдает:

Сведения об исключении: System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
Ошибка источника: 
Строка 16:         ShowList()
Строка 17:         Dim item As PlaceHolder = CType(lst_cont.FindControl("lst_PlaceHolder_cont"), PlaceHolder)
Строка 18:         Dim div As HtmlControls.HtmlContainerControl = CType(item.FindControl("div_repair"), HtmlControls.HtmlContainerControl)
Строка 19:         div.Visible = False
Строка 20:         Page.DataBind()
 

Автор: Freyzer 26.10.2010, 13:06
Странно у тебя как то получаеться, тег див ты объявляешь классом 
Код

"content_middle_all"

ид присваеваешь 
Код

"div_repair"

 а в коде обращаешься к диву, без имени, я такую проблему пока не решал, но что то тут не так.
И вобще, с такими вопроса в АСП,НЕТ надо идти  smile 

Автор: hasbah 26.10.2010, 13:13
Код

 "content_middle_all"


это класс csss

Автор: Freyzer 26.10.2010, 13:29
Ну вот тебе кое что в помощь, может поможет 
Код

Dim mv1 As Label = CType(DataList1.Items(0).FindControl("Label1"), Label)
        Dim mv11 As Label = CType(DataList1.Items(2).FindControl("Label1"), Label)
        mv1.ForeColor = Drawing.Color.Red
        mv11.ForeColor = Drawing.Color.Red

вот 
Код

<ItemTemplate>

                <asp:Label ID="Label1" Runat="server" Text='<%# XPath("pubDate") %>'  

                    Font-Size="XX-Small" Font-Names="Broadway"></asp:Label><br />
<AlternatingItemTemplate>

                <asp:Label ID="Label3" Runat="server" Text='<%# XPath("pubDate") %>'


Автор: diadiavova 26.10.2010, 13:37
hasbah, я конечно не силен в аспнет, но мне почему-то думается, что причина в том, что ты пытаешься это проделать с хтмл-элементом(клиентским) к которому по идее серверная логика неприменима. Попробуй заменить его серверным контролом и посмотри что будет. Если все заработает, значит причина скорей всего в этом.

А вообще вопрос действительно не по разделу, так что переношу.

Автор: hasbah 26.10.2010, 13:48
Цитата(diadiavova @ 26.10.2010,  13:37)
hasbah, я конечно не силен в аспнет, но мне почему-то думается, что причина в том, что ты пытаешься это проделать с хтмл-элементом(клиентским) к которому по идее серверная логика неприменима. Попробуй заменить его серверным контролом и посмотри что будет. Если все заработает, значит причина скорей всего в этом.

 

дык я ж присвоил ему id и написал runat="server"  smile 

Автор: diadiavova 26.10.2010, 13:57
Цитата(hasbah @  26.10.2010,  14:48 Найти цитируемый пост)
дык я ж присвоил ему id и написал runat="server"

Ну вообще-то у хтмл-элементов тоже есть атрибут id и он работает на клиентской стороне и имеет другой смысл. Но вообще я ни на чем не настаиваю, я тебе предложил вариант и способ его проверить. Если с серверным элементом не будет этой проблемы, значит я прав.

Автор: hasbah 26.10.2010, 15:47
отбой, ребят.сдела.
только вместо div'а использовал Panel

Код

 Public Sub chan(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs)
        Dim lvdi As ListViewDataItem = CType(e.Item, ListViewDataItem)
        Dim p As Panel = CType(e.Item.FindControl("pnl_repair"), Panel)
        p.Visible = True
        p.DataBind()
    End Sub


вызывал так:
Код

 AddHandler lst_cont.ItemDataBound, AddressOf chan


мало ли, вдруг кому пригодится (=

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)