将Dictionary <string,string =“”>绑定到DataList </string,>

时间:2013-06-05 16:10:10

标签: c# asp.net data-binding dictionary datalist

我有一个字典(让我们称之为信息)我试图绑定到DataList(我们称之为目录)。字典声明如下:

    Dictionary<string, string> info = new Dictionary<string, string>(){
       {"AdvertisementID", "1"},
       {"CompanyName", "Test"},
       //More elements
      };

现在,我将Dictionary绑定到DataList,如下所示:

    directory.DataSource = info;
    directory.DataBind();

我的asp代码如下:

    <asp:DataList ID = "directory" runat="server" RepeatColums="3" RepeatDirection="Horizontal" DataKeyField="Key">
    <ItemTemplate>
            //HTML Formatting
            <%# DataBinder.Eval(Container.DataItem, "CompanyName") %>
        </ItemTemplate>
    </asp:DataList>

无论出于何种原因,都找不到“CompanyName”。当输出Container.DataItem.ToString()时,出现的只是AdvertisementID(字典中的第一件事)。我做错了什么?

编辑:我还想提一下,我试图实施此解决方案无济于事:     Binding DataList to Dictionary

编辑2:我想要完成的是以下内容:

我从字典中的数据库中提取了大量信息。这个字典像Dictionary一样设置,都是字符串。我正在尝试将此信息输出到网页。

编辑3 使用下面的解决方案(绑定对象列表而不是字典),我的asp代码仍然找不到属性“CompanyName”。对象及其中的所有字符串都出现在调试器的DataItem中。

2 个答案:

答案 0 :(得分:3)

你不能像这样使用词典。字典上的项目为KeyValuePair,只有可用的属性为KeyValue

因此,只有2个有效选项是

<%# DataBinder.Eval(Container.DataItem, "Key") %>

或者

<%# DataBinder.Eval(Container.DataItem, "Value") %>

你可能想要更好地解释你想要达到的目标,因为这可能不足以解决你的问题。

修改

你通常会有类似的东西

public class Info
{
    public int AdvertisementID { get; set; }
    public string CompanyName { get; set; }
    //More elements
}

然后

IList<Info> infoList = GetList();
directory.DataSource = infoList;
directory.DataBind();

如果你实现类似的东西,你可以保持你的html

答案 1 :(得分:0)

请尝试使用KeyValue

Value代替CompanyName)