2014-01-21 1 views
0

У меня есть элемент управления ListView, и я использую привязку модели к свойству SelectMethod. Я использую ASP.NET 4.5 с Entity Framework 6. Теперь в методе select, если есть какие-либо записи, ListView загружается нормально. Однако, если функция SelectMethod возвращает значение null, то есть оно не возвращает никаких записей, я получаю исключение NullReferenceException. Я хотел бы продолжить использование ListView с помощью SelectMethod, но без этого исключения (т. Е. Загрузить пустой список). Это возможно? Или мне нужно удалить свойство SelectMethod и загрузить его вручную из обработчика событий в коде?Как я могу выполнить привязку модели с помощью метода SelectMethod, когда запрос не возвращает записи?

Пример кода

<asp:ListView ID="lvBankAccounts" runat="server" ClientIDMode="Static" DataKeyNames="Id" ItemType="Models.BankAccountInfo" SelectMethod="GetBankAccounts"> 
    <ItemTemplate> 
     <div> 
      <%# Item.BankName %> 
     </div> 
     . 
     . 
    </ItemTemplate> 
</asp:ListView> 

// Select Method 
public IQueryable<Models.BankAccountInfo> GetBankAccounts() 
{ 
    int Id; 
    int.TryParse(Request.QueryString["id"], out Id); 
    Models.BankAccountInfo acct = dbContext.BankAccounts.Find(Id); 
    if (acct != null) 
    { 
     return dbContext.BankAccounts.Where(account => account.Id == acct.Id); 
    } 
    return null; 
} 

ответ

1

Возвращение типа IQueryable, поэтому вы должны вернуть IQueryable, например

var query = from ba in dbContext.BankAccounts 
      where ba.Id == acct.Id 
      select ba; 

return query; 

и пусть дело ListView с «пустой/нулевой» IQueryable, если запрос не возвращает никаких записей.

0

Если вы хотите отобразить сообщение, когда нет никаких данных реализации EmptyDataTemplate:

// в вашем .aspx

<asp:ListView ID="lvBankAccounts" runat="server"> 
    <EmptyDataTemplate> 
     No data available. 
    </EmptyDataTemplate> 
</asp:ListView> 
+0

Спасибо за ваш ответ! На самом деле, это была одна из первых вещей, которые я пробовал. Даже с EmptyDataTemplate это дает мне ошибку: Ссылка на объект не установлена ​​в экземпляр объекта. System.Web.UI.WebControls.ModelDataSourceView.FindMethod (String methodName) +160 – Sephrial