Asp.net 用接口列表而不是类绑定ListView

Asp.net 用接口列表而不是类绑定ListView,asp.net,listview,data-binding,interface,Asp.net,Listview,Data Binding,Interface,好吧,这有点复杂,让我解释一下 我在一个现有项目中有几个类有不同的联系信息。例如,CompanyContact可能包含 1. CompanyName 2. Phone 3. Fax ProviderContact可能有 1. ProviderName 2. FirstName, 3. LastName, 4. Phone, 5. Fax 和ProviderLocation可能有 1. Name (location name) 2. Phone1 3. Fax1 每个类都有附加属

好吧,这有点复杂,让我解释一下

我在一个现有项目中有几个类有不同的联系信息。例如,CompanyContact可能包含

 1. CompanyName
 2. Phone
 3. Fax
ProviderContact可能有

1. ProviderName
2. FirstName, 
3. LastName, 
4. Phone, 
5. Fax
和ProviderLocation可能有

1. Name (location name)
2. Phone1
3. Fax1
每个类都有附加属性,这只是一个子集。有些字段的含义相同,但名称不同。CompanyName、ProviderName和Name(在ProviderLocation中)的意思都是一样的,就像Phone和Phone1是一样的(至少就我而言)

我创建了一个接口IFaxContact,试图为所有这些类提供一个通用接口,因为我需要在不同的情况下从它们那里获取联系信息,以实现传真和电子邮件的自动化

public interface IFaxContact
{
    string EntityName { get; set;}
    string FullName {get; set;}
    string Email { get; set;}
    string Fax { get; set;}
    string Phone { get; set;}
}
我在所有有问题的类中都显式地实现了这一点,但是如果该属性已经存在,我不会再添加它,因为现有属性将用于所有实现

我目前有一个factory类,它正在创建单个类并返回IFaxContact或
列表的对象。这在很大程度上是可行的

现在,我有了一个ListView控件,我将一个
列表
绑定为数据源。当它进行绑定时,它引用对象作为基类(即CompanyContact),而不是接口IFaxContact,并且由于该字段不存在而给我错误。我试图将它转换为绑定表达式中的IFaxContact,但它没有接受它

<asp:ListView ID="lvRecipients" runat="server" OnItemCommand="lvRecipients_ItemCommand">
    <LayoutTemplate>
        <ul style="list-style: none;">
            <li runat="server" id="itemPlaceholder"></li>
        </ul>
    </LayoutTemplate>
    <ItemTemplate>
        <li>**<span style="width: 100px; margin-right: 2px;"><%# Eval("FullName") %></span>
            <span style="width: 100px; margin-right: 2px;"><%# DataBinder.Eval((Entities.IFaxContact)Container.DataItem, "EntityName")%></span>
            <span style="width: 50px; margin-right: 2px;"><%# Eval("Fax") %></span>
            <span style="width: 50px;">**
             <a href="#" runat="server" onclick="lnkAddOtherRecipient_Click">
               <i class="fa faGreen fa-plus fa-lg "></i>
             </a>
            </span>
        </li>
    </ItemTemplate>
</asp:ListView>


正在上面的ItemTemplate中进行绑定

我得到的错误如下: System.Web.HttpException(0x80004005):数据绑定:“Entities.CompanyContact”不包含名为“EntityName”的属性

这是因为EntityName存在于IFaxContact下,而不在类(即CompanyContact)中,但DataItem的类型为CompanyContact(或其他类之一)

我需要一些帮助来弄清楚如何正确地将Eval(…)表达式中的Container.DataItem强制转换为IFaxContact,或者弄清楚如何使用我目前设计的接口的另一个解决方案


谢谢

您可以像这样使用Eval:
这样使用界面是不符合目的的。我的解决方案是将列表复制到匿名对象列表中,然后将控件绑定到该列表。这将是一个简短的列表(<15项),所以我现在不担心性能。