对象引用未设置为按钮

时间:2015-04-27 15:15:46

标签: c# asp.net

我的Listview ItemTemplate中有一个按钮:

<asp:Button ID="EditButton" runat="server" Visible="false" Enabled="false" class="btn btn-sm btn-success" CommandName="Edit" Text="Edit" />

然后我的Listview的ItemDataBound事件我有:

protected void listview_ItemDataBound(object sender, ListViewItemEventArgs e)
{
   var btn_edit = e.Item.FindControl("EditButton") as Button;

   if(isOwner == false)
   {
     // code here..
   }
   else
   {
     btn_edit.Enabled = true;
     btn_edit.Visible = true;
   }

}

编辑按钮显示我加载页面时显示btn_edit.Visible = true;正在运行,但是当我点击它时,它会中断并给我这个错误:

  

对象引用未设置为对象的实例。

我知道这些错误,但我不明白为什么会收到此错误?特别是当它达到Visible = true;声明时?

有谁知道我可能做错了什么?

PS:在我在代码和XML中设置Enabled和Visible之前用来工作的按钮

更新:我通过调试行缩小了错误,在ItemDataBound事件中它显示btn_edit不为null并显示Text和CommandName属性值,但是当我点击它时,它会通过相同的再次发生事件,此时显示btn_edit为null。因此当我在显示错误时点击它时

1 个答案:

答案 0 :(得分:0)

您应该始终检查绑定的项目类型,以避免此类错误 例如(MSDN reference):

protected void listview_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
       var btn_edit = e.Item.FindControl("EditButton") as Button;

       if (isOwner == false)
       {
         // code here..
       }
       else
       {
         btn_edit.Enabled = true;
         btn_edit.Visible = true;
       }

    }
}