带有字符串列表的嵌套转发器
nest repeater with list of string
我有一个以下类型的对象:
public class TriggerMessage
{
public List<string> Triggers_EN { get; set; }
public List<string> Triggers_FR { get; set; }
public string Message_EN { get; set; }
public string Message_FR { get; set; }
public int UID { get; set; }
}
现在,我在一个列表中也有一堆这样的对象...
List<TriggerMessage> dataset = new List<TriggerMessage>(){.......};
现在我也将这个列表绑定到转发器:
<table style="width:100%;">
<asp:Repeater ID="lstTriggers" runat="server">
<HeaderTemplate>
<tr style="border-bottom:1px solid black;">
<th>English Triggers</th>
<th>French Triggers</th>
<th>English Message</th>
<th>French Message</th>
<th>Actions</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><div style="overflow-x:scroll; width:100%"><%#Eval("Triggers_EN").ToString() %></div></td>
<td><div style="overflow-x:scroll; width:100%"><%#Eval("Triggers_FR").ToString() %></div></td>
<td><div style="overflow-x:scroll; width:100%"><%#Eval("Message_EN") %></div></td>
<td><div style="overflow-x:scroll; width:100%"><%#Eval("Message_FR") %></div></td>
<td><a href="Modify.aspx?ID=<%#Eval("UID") %>">Modify</a> | <a href="Delete.aspx?ID=<%#Eval("UID") %>">Delete</a></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
所以问题是什么?好吧,在我的转发器中,对于英语和法语触发器,我得到 System.Collections.Generic.List`1[System.String]
而不是实际的字符串列表......我心想:构建一个 "simple" 版本的对象,它只有一个字符串而不是列表...但是那只是显示列表的 HTML 版本的大量代码。
有没有办法使用嵌套的转发器将字符串列表显示为单独的字符串,而不必构建不同的对象或使用 OnItemDataBound
事件?
嵌套的中继器可以工作,但可能有点矫枉过正。如果您不想使用 OnItemDataBound
事件,最简单的方法是使用 string.Join("<br/> ", items)
。
提示:如果您使用 .NET Framework 4.5 或更高版本,您可以使用 ItemType
进行强类型数据绑定,这样您就不必将对象转换为实际类型。
例如,
<asp:Repeater ID="lstTriggers" runat="server" ItemType="AspNetWebForm.TriggerMessage">
<HeaderTemplate>
<tr style="border-bottom: 1px solid black;">
<th>English Triggers</th>
<th>French Triggers</th>
<th>English Message</th>
<th>French Message</th>
<th>Actions</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<div style="overflow-x: scroll; width: 100%">
<%# string.Join("<br/>", (List<string>)Eval("Triggers_EN")) %>
</div>
</td>
<td>
<div style="overflow-x: scroll; width: 100%">
<%# string.Join("<br/>", Item.Triggers_FR) %>
</div>
</td>
<td>
<div style="overflow-x: scroll; width: 100%"><%#Eval("Message_EN") %></div>
</td>
<td>
<div style="overflow-x: scroll; width: 100%"><%#Eval("Message_FR") %></div>
</td>
<td><a href="Modify.aspx?ID=<%#Eval("UID") %>">Modify</a> | <a href="Delete.aspx?ID=<%#Eval("UID") %>">Delete</a></td>
</tr>
</ItemTemplate>
</asp:Repeater>
我有一个以下类型的对象:
public class TriggerMessage
{
public List<string> Triggers_EN { get; set; }
public List<string> Triggers_FR { get; set; }
public string Message_EN { get; set; }
public string Message_FR { get; set; }
public int UID { get; set; }
}
现在,我在一个列表中也有一堆这样的对象...
List<TriggerMessage> dataset = new List<TriggerMessage>(){.......};
现在我也将这个列表绑定到转发器:
<table style="width:100%;">
<asp:Repeater ID="lstTriggers" runat="server">
<HeaderTemplate>
<tr style="border-bottom:1px solid black;">
<th>English Triggers</th>
<th>French Triggers</th>
<th>English Message</th>
<th>French Message</th>
<th>Actions</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><div style="overflow-x:scroll; width:100%"><%#Eval("Triggers_EN").ToString() %></div></td>
<td><div style="overflow-x:scroll; width:100%"><%#Eval("Triggers_FR").ToString() %></div></td>
<td><div style="overflow-x:scroll; width:100%"><%#Eval("Message_EN") %></div></td>
<td><div style="overflow-x:scroll; width:100%"><%#Eval("Message_FR") %></div></td>
<td><a href="Modify.aspx?ID=<%#Eval("UID") %>">Modify</a> | <a href="Delete.aspx?ID=<%#Eval("UID") %>">Delete</a></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
所以问题是什么?好吧,在我的转发器中,对于英语和法语触发器,我得到 System.Collections.Generic.List`1[System.String]
而不是实际的字符串列表......我心想:构建一个 "simple" 版本的对象,它只有一个字符串而不是列表...但是那只是显示列表的 HTML 版本的大量代码。
有没有办法使用嵌套的转发器将字符串列表显示为单独的字符串,而不必构建不同的对象或使用 OnItemDataBound
事件?
嵌套的中继器可以工作,但可能有点矫枉过正。如果您不想使用 OnItemDataBound
事件,最简单的方法是使用 string.Join("<br/> ", items)
。
提示:如果您使用 .NET Framework 4.5 或更高版本,您可以使用 ItemType
进行强类型数据绑定,这样您就不必将对象转换为实际类型。
例如,
<asp:Repeater ID="lstTriggers" runat="server" ItemType="AspNetWebForm.TriggerMessage">
<HeaderTemplate>
<tr style="border-bottom: 1px solid black;">
<th>English Triggers</th>
<th>French Triggers</th>
<th>English Message</th>
<th>French Message</th>
<th>Actions</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<div style="overflow-x: scroll; width: 100%">
<%# string.Join("<br/>", (List<string>)Eval("Triggers_EN")) %>
</div>
</td>
<td>
<div style="overflow-x: scroll; width: 100%">
<%# string.Join("<br/>", Item.Triggers_FR) %>
</div>
</td>
<td>
<div style="overflow-x: scroll; width: 100%"><%#Eval("Message_EN") %></div>
</td>
<td>
<div style="overflow-x: scroll; width: 100%"><%#Eval("Message_FR") %></div>
</td>
<td><a href="Modify.aspx?ID=<%#Eval("UID") %>">Modify</a> | <a href="Delete.aspx?ID=<%#Eval("UID") %>">Delete</a></td>
</tr>
</ItemTemplate>
</asp:Repeater>