无法改变呈现的HTML代码

问题描述:

我有一个aspx页面(比如MyPage.aspx),其中它的一部分具有以下结构面板的可见性 -无法改变呈现的HTML代码

<asp:DataList ... > 
    <HeaderTemplate> 
     ... 
    </HeaderTemplate> 
    <ItemTemplate> 
     <asp:Table ID="table" runat="server"> 
      <asp:TableRow ... > 
       <asp:TableCell ... > 
        <asp:ImageButton ID="btnToggle" OnClick="ToggleVisibility" ... > 
       </asp:TableCell> 
       ... 
      </asp:TableRow> 
     </asp:Table> 
     <asp:DataGrid ... > 
     </asp:DataGrid> 
     <asp:Panel ID="panel" runat="server" ...> 
      <asp:Button ID="button1" runat="server" ...> 
      <asp:Button ID="button2" runat="server" ...> 
     </asp:Panel> 
    </ItemTemplate> 
    <AlternatingItemTemplate> 
     ... 
    </AlternatingItemTemplate> 
</asp:DataList> 

我所试图做的是,每当单击btnToggle,它将切换panel的可见性。我在ToggleVisibility()这样获得panel -

Dim panelToggle As Panel = sender.Parent.Parent.Parent.Parent.Controls(5) 

在此功能中我能够改变其Visible属性,但其知名度不渲染HTML页面上更改(通过浏览器检查)。

我无法弄清楚为什么。请帮忙。

谢谢。

OnItemCommand事件添加到处理按钮单击的DataList。您不需要再将OnClick事件添加到按钮本身。

<asp:DataList ID="DataList1" runat="server" OnItemCommand="DataList1_ItemCommand"> 
    <ItemTemplate> 
     <asp:Button ID="btnToggle" runat="server" Text="Button" /> 
     <asp:Panel ID="panel" runat="server"> 
      Panel content. 
     </asp:Panel> 
    </ItemTemplate> 
</asp:DataList> 

然后在后面的代码

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    //find the panel in the datalist item object and cast it back to a panel 
    Panel panel = e.Item.FindControl("panel") as Panel; 

    //you can now access it's properties 
    panel.Visible = false; 
} 

VB

Protected Sub DataList1_ItemCommand(ByVal source As Object, ByVal e As DataListCommandEventArgs) 
    'find the panel in the datalist item object and cast it back to a panel 
    Dim panel As Panel = CType(e.Item.FindControl("panel"),Panel) 

    'you can now access it's properties 
    panel.Visible = false 
End Sub 
+0

虽然问题是与我曾写信给'ToggleVisibility()'的逻辑,我用你的想法来管理更好。实际上,我试图首先设置按钮的可见性,如果有任何一个可见,我不得不将这个'panel'设置为可见的,但是由于默认情况下'panel'是不可见的('Visible =“false “'),程序不允许我在没有首先设置可见的”面板“的情况下先让这些按钮可见。 – PalashV