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