2015-04-27 3 views
0

У меня есть кнопка внутри ItemTemplate моего Listview:Ссылка на объект не указывает на экземпляр объекта на кнопке

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

Тогда с моим ItemDataBound событием для моего Listview у меня есть:

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

} 

Кнопка редактирования показывает, когда я загружаю страницу, чтобы она показывала, что работает , но когда я нажимаю на нее, она ломается и дает мне эту ошибку:

Object reference not set to an instance of an object.

Я знаю об этих ошибках, однако я не понимаю, почему я получаю эту ошибку? Особенно, когда он достигает заявления Visible = true;?

Кто-нибудь знает, что я могу делать неправильно?

PS: кнопка используется для работы, прежде чем я установил Enabled и Visible в коде и в XML

UPDATE: Я сузили ошибку вниз отладки на линии, в случае ItemDataBound это показывает, что btn_edit не является нулевым и показывает значения свойства Text и CommandName, однако, когда я нажимаю на него, он снова проходит через одно и то же событие и на этот раз показывает, что btn_edit имеет значение null. Поэтому, когда я нажимаю на него, когда появляется ошибка

+1

Я подозреваю, что '' btn_edit' является null', поэтому 'FindControl' ничего не возвращает. Поместите контрольную точку сразу после строки «FindControl» и проверьте, действительно ли она «null». –

+0

Если ошибка возникает в событии 'Button_Click', то ошибка находится в коде этого события. –

+0

@JoshPart Как же? Он работал до того, как кнопка была установлена ​​на включенную и видимую. – c0mrade

ответ

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

    } 
} 
+0

Я добавил это, и он все еще не работает – c0mrade

+0

Можете ли вы предоставить дополнительную информацию о том, чего вы пытаетесь достичь с помощью этой кнопки? Чтобы лучше понять всю картину. Например, ваша кнопка установила имя команды; возможно, это изменение активного шаблона элемента ListView, и именно поэтому он больше не «существует» после обратной передачи; потому что отображается другой шаблон (шаблон элемента редактирования в представлении списка). – zed

+0

Я думаю, что вы только что сказали, может быть проблемой! Вы хоть представляете, как я это разрешу, если это так? – c0mrade

Смежные вопросы