asp.net c使用按钮隐藏/显示Listview内的面板(预览插入)

时间:2012-07-05 11:15:03

标签: c# asp.net listview

我正在尝试向用户显示他们将要在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.

非常感谢任何帮助。

3 个答案:

答案 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;
 }