После просмотра еще немного:
Краткий ответ: Нет, добавить другой элемент управления внутри BulletedList
невозможно. BulletedList
s не поддерживают шаблоны.
Если вы хотите, чтобы вся строка роли была HyperLink
или 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();
}