ASP.Net中继器与对象集合绑定



我有一个集合List<Person> Persons, Person中有一个Country (Country. name)。我已经成功地将我的中继器绑定到我的集合,但是试图写出国家名称给了我一些麻烦,我也有一个bool IsActive在我的人,我想显示一个图标,而不是真/假。

protected void Page_Load(object sender, EventArgs e)
    {
        List<Person> persons = GetPersons();
        RP_Persons.DataSource = persons;
        RP_Persons.DataBind();
    }
    protected void RP_Persons_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
           // How do I get my stuff here? I need to get the country name and be able to use a <div class="active"><img src='xxxx' /></div>
        }
    }

这是我的标记:

<ItemTemplate>
    <tr>
        <td><%# DataBinder.Eval(Container.DataItem, "Email") %></td>
        <td><%# DataBinder.Eval(Container.DataItem, "Registered") %></td>
        <td><%# DataBinder.Eval(Container.DataItem, "Country") %></td>
        <td><%# DataBinder.Eval(Container.DataItem, "IsActive") %></td>
    <tr>
</ItemTemplate>

虽然您在回答中提供的方法确实有效,但我认为这种类型的代码更容易在代码隐藏中完成和维护,正如您所建议的那样。

你可以这样做:

这是aspx文件的代码:

<ItemTemplate>
    <tr>
        <td><%# DataBinder.Eval(Container.DataItem, "Email") %></td>
        <td><%# DataBinder.Eval(Container.DataItem, "Registered") %></td>
        <td><asp:Label id="lblCountry" runat="server" /></td>
        <td>
            <asp:Image id="imgActive" ImageUrl="~/IMAGE_NAME" runat="server" />
            <asp:Image id="imgInactive" ImageUrl="~/IMAGE_NAME" runat="server" />
        </td>
    <tr>
</ItemTemplate>

aspx.cs文件代码:

protected void RP_Persons_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
           Person person = (Person)e.Item.DataItem;
           ((Label)e.Item.FindControl("lblCountry")).Text = person.Country.Name;
           if(person.IsActive) {
              ((Image)e.Item.FindControl("imgActive")).Visible = True;
              ((Image)e.Item.FindControl("imgInactive")).Visible = False;
           }
           else {
              ((Image)e.Item.FindControl("imgActive")).Visible = False;
              ((Image)e.Item.FindControl("imgInactive")).Visible = True;
           }
        }
    }

就这么简单:

<td><%# DataBinder.Eval(Container.DataItem, "Country.Name") %></td>

现在我只需要弄清楚如何处理布尔值并显示图像而不是true/false。

(编辑)…我找到了一种在真实和虚假图像之间切换的方法。我发现它相当笨拙,所以我愿意改进。

<%# DataBinder.Eval(Container.DataItem, "IsActive").ToString() == "True" ? "<span class='label label-success'>Active</span>" : "<span class='label'>Inactive</span>"%>

最新更新