У меня возникли проблемы с вызовом свойства или метода для объекта строки с привязкой к данным внутри ListView. Смотрите этот пример:
<asp:ListView runat="server" ID="FullInfoListView">
<LayoutTemplate>
<table class="tablestripe" width="100%">
<asp:Placeholder runat="server" ID="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr valign="top" runat="server" Visible='<%# !string.IsNullOrEmpty((string)Eval("Phone")) %>'>
<td><strong>Phone:</strong></td>
<td><span runat="server" Visible='<%# ((string)Eval("Phone")).Length == 4 %>'>x</span><%# Eval("Phone") %></td>
</tr>
</ItemTemplate>
</asp:ListView>
Эта строка:
<%# ((string)Eval("Phone")).Length == 4 %>'>
это то, что доставляет мне неприятности. Если я удаляю .Length все работает нормально. Если я оставлю это там, мой код выдаст «Ссылка на объект не установлена для экземпляра объекта». исключение в строке, где я вызываю метод DataBind () для ListView в моем коде позади. То же самое происходит и с .ToLower ().
EDIT
Думаю, я понял это. Спасибо тем из вас, кто предложил перенести это в метод из кода, чтобы помочь с отладкой. Проблема была связана с нулевой ссылкой ... пойди разберись :) Я думал, что если строка таблицы не видна, то ни одна из логики внутри не будет оценена, но я думаю, что из-за того, что она связана с данными, логика все равно оценили. Таким образом, просто изменив вышеприведенную строку на следующую, мы решили проблему:
<%# Eval("Phone") != null && ((string)Eval("Phone")).Length == 4 %>'>