我的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。因此当我在显示错误时点击它时
答案 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;
}
}
}