在进一步研究之后:
BulletedList
简短回答:不,不可能在 a 中添加另一个控件。BulletedList
s 不支持模板。
如果您希望整个角色字符串为 aHyperLink
或 a LinkButton
,您可以简单地设置DisplayMode
的BulletedList
。
如果希望 LinkButton 出现在文本字符串的末尾,则需要使用更灵活的列表结构。Repeater
可能是最容易获得您描述的效果的方法。
就像是
<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li>Role name: <%# DataBinder.Eval(Container.DataItem, "RoleName") %>.
Number of members in the role: <%# DataBinder.Eval(Container.DataItem, "RoleCount") %>.
<asp:LinkButton onCommand="LinkButton_Command"
CommandArgument="<%# DataBinder.Eval(Container.DataItem, "RoleName") %>"
/>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
带有代码隐藏
private void BindRolesToList()
{
string[] roles = Roles.GetAllRoles();
//make a table for the data, with two columns, RoleName and RoleCount
DataTable data = new DataTable();
DataColumn column;
column = New DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "RoleName";
table.Columns.Add(column);
column = New DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "RoleCount";
table.Columns.Add(column);
// Populate the data
DataRow row;
for (int i = 0; i<roles.Length; i++ )
{
row = data.NewRow();
row["RoleName"] = roles[i];
row["RoleCount"] = Roles.GetUsersInRole(roles[i]).Count();
data.Rows.Add(row);
}
RoleList.DataSource = data;
RoleList.DataBind();
}
private void LinkButton_Command(Object sender, CommandEventArgs e)
{
string RoleName = e.CommandArgument;
//whatever code deletes the role, e.g.
// Roles.DeleteRole(RoleName);
BindRolesToList();
}