我正在尝试向用户显示他们将要在ListView中插入的信息的预览。我有两个面板,我希望能够使用ListView的InsertItemTemplate中的按钮显示和隐藏。
下面我为ListView提供的代码仅用于说明目的。该函数是我正在使用的实际代码:
<asp:ListView ID="ListView1" runat="server">
<InsertItemTemplate>
<asp:Panel ID="pnlInsert" runat="server" Visible="true">
<asp:Button ID="btnPreview" runat="server" OnClick="showPreview" Text="Preview" />
</asp:Panel>
<asp:Panel ID="pnlPreview" runat="server" Visible="false">
<p>This is the preview</p>
</asp:Panel>
</InsertItemTemplate>
</asp:ListView>
protected void showPreview(object sender, EventArgs e)
{
Panel pnlInsert = (Panel)ListView1.FindControl("pnlInsert");
pnlInsert.Visible = false;
Panel pnlPreview = (Panel)ListView1.FindControl("pnlPreview");
pnlPreview.Visible = true;
}
我得到的错误是:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
非常感谢任何帮助。
答案 0 :(得分:0)
瓦特 查看代码Panels位于名为ListView1的ListView内部,但您正在搜索ListView1的Parent.Controls中的面板
你需要的是ListView1.FindControl(“pnlInsert)&amp; ListView1.FindControl(”pnlPreview“)
答案 1 :(得分:0)
没有'pnlInsert',有一个'Panel 1'。
而不是使用as
关键字向控制台投射控件。我是
Panel pnlInsert = e.FindControl("pnlInsert") as Panel;
if (pnlInsert != null)
{
//do something with pnlInsert
}
ListView1.Parent.FindControl("pnlInsert")
正在查找ListView控件的父级,然后在ListView中进行控件。你的pnlInsert是ListView的孩子。
根据您的其余代码,您可以改为执行此操作:
protected void showPreview(object sender, EventArgs e)
{
pnlInsert.Visible = false;
pnlPreview.Visible = true;
}
答案 2 :(得分:0)
空引用异常是因为pnlInsert或plnPreview被赋值为null;可能是因为FindControl方法无法在ListView1中找到“pnlInsert”或“pnlPreview”控件。
另外我在ListView1中看到,第一个面板的ID是“Panel1”,因此您应该更改代码行
Panel pnlInsert = (Panel)ListView1.FindControl("pnlInsert");
到
Panel pnlInsert = (Panel)ListView1.FindControl("Panel1"); or
将标记中Panel的ID更改为“pnlInsert”。
同样建议在处理FindControl时使用防御性代码。将您的代码更改为
Panel pnlInsert = ListView1.FindControl("pnlInsert") as Panel;
if(pnlInsert != null)
{
pnlInsert.Visible = false;
}
else
{
// control not found - do something;
}
Panel pnlPreview = ListView1.FindControl("pnlPreview") as Panel;
if(pnlPreview != null)
{
pnlPreview.Visible = true;
}
else
{
// control not found - do something;
}