[英]How to bind class with List of Objects as property to repeater?
我们有 class 我们在 ascx-page 中使用,在转发器中:
Class:
public class TestClass{
public int Id;
...
public int NumPeople {get;set};
public List<ReservationOccupancy> ReservationOccupancyList {get;set};
}
Header:
<th id="tdNumPeople" runat="server">
asp:Image ID="Image15" runat="server" CssClass="sortico" ImageUrl="/img/blank.gif" />
<asp:LinkButton ID="LinkButton4" runat="server" CommandName="NumPeople" Text="# of Guests "></asp:LinkButton></th>
<th id="tdSource" runat="server">
<asp:Image ID="Image16" runat="server" CssClass="sortico" ImageUrl="/img/blank.gif" />
<asp:LinkButton ID="LinkButton5" runat="server" CommandName="Source" Text="Source "></asp:LinkButton></th>
<% for (int i = 0; i < SOcolu.Length; i++)
{
%><th><%= SOcolu[i] %></th>
<% } %>
项目模板:
<td><%#Eval("NumPeople") %></td>
<td>
<asp:Label ID="lblSource" runat="server"></asp:Label>
</td>
<td><%#(List<ReservationOccupancy>)DataBinder.Eval(Container.DataItem,"ReservationOccupancyList") %>
</td>
我们使用 Eval 作为它的属性,但在 class 中,我们有 Object 的列表:
public List<ReservationOccupancy> ReservationOccupancyList
预订入住人数class:
public class ReservationOccupancy
{
public string ColumnName;
public int ColumnValue;
}
我们想像这样显示转发器 - 例如,我们有以下列表:
ReservationOccupancyList = new List<ReservationOccupancy>()
{
{ColomnName = "ColumnName1", ColumnValue = 1},
{ColomnName = "ColumnName2", ColumnValue = 2}
},
Id NumPeople ColumnName1 ColumnName2
5 3 1 2
我们可以显示/绑定 NumPeople,但是当我们尝试绑定 List(例如,使用 datacontainer)时,我们会引用一个通用集合作为视图中的值。
尝试将其引用为 DataBinder.Eval(Container.DataItem,"ReservationOccupancyList[0].ColumnValue") DataBinder.Eval(Container.DataItem,"ReservationOccupancyList[1].ColumnValue") 等。
在此页面https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.databinder.eval?view=netframework-4.8我找到了这个解释:
"从容器 object 到要放置在绑定控件属性中的公共属性值的导航路径。这必须是由句点分隔的属性或字段名称的字符串,例如 Tables[0].DefaultView.[0].Price "
在我看来,您必须为 DataBinder.Eval 提供通过列表到特定字段的路径,因为它不能只呈现列表。
希望这会有所帮助,或者至少可以让您指出正确的方向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.