我在列表视图的Itewmtemplate中有一个面板,它只应该在用户登录时显示,默认情况下visibility = false。感谢帮助。
这是我的c#代码:
Panel pnlOptions = (Panel)ListView1.FindControl("pnlOptions");
pnlOptions.Visible = true;
Aspx代码:
<asp:Panel ID="pnlOptions" runat="server" Visible="false">
<ul>
<ul>
<li style="float: left">Option 1:</li>
<li style="float: left">dropdown here</li>
</ul>
<li style="float: left">Option 1:</li>
<li style="float: left">dropdwon here</li>
</ul>
</asp:Panel>
答案 0 :(得分:1)
您收到错误是因为FindControl调用是:
失败 - 如果未找到该项作为控件的子项,FindControl将返回null。
查找“错误”对象,并且(Panel)
的强制转换失败。
我建议将代码重写为:
Control control = ListView1.FindControl("pnlOptions");
Panel pnlOptions = control as Panel;
pnlOptions.Visible = true;
然后,您可以设置断点,并找出哪些线路失败。
答案 1 :(得分:0)
我的问题是我试图通过我创建的函数错误地访问它,因为我应该使用Item Created Event这里是最终的工作代码:
protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
Control control = e.Item.FindControl("pnlOptions");
Panel pnlOptions = control as Panel;
pnlOptions.Visible = true;
}
谢谢里德。
答案 2 :(得分:0)
这也应该有效:
foreach (var item in ListView1.Items)
{
Panel pnlOptions = (Panel)item.FindControl("pnlOptions");
pnlOptions.Visible = true;
}