当查询没有返回记录时,如何使用SelectMethod执行模型绑定?

时间:2014-01-21 16:09:13

标签: c# asp.net data-binding webforms entity-framework-6

我有一个ListView控件,我使用Model Binding和SelectMethod属性。我正在使用ASP.NET 4.5和Entity Framework 6.现在在select方法中,如果找到任何记录,ListView加载正常。但是,如果SelectMethod函数返回null,意味着它不返回任何记录,我会收到NullReferenceException。我想继续使用带有SelectMethod的ListView但没有此异常(即加载空列表视图)。这可能吗?或者我是否必须删除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;
}

2 个答案:

答案 0 :(得分:1)

返回类型是IQueryable,因此您应该返回IQueryable,例如

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

return query;

如果查询没有返回任何记录,那么让listview处理'blank / null'IQueryable。

答案 1 :(得分:0)

如果要在没有数据时显示消息,请执行EmptyDataTemplate:

//在你的.aspx

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