使用C#WebForms asp:BulletedList,列表中有3个url

时间:2013-08-16 06:42:44

标签: c# webforms

我需要继续使用列表框来执行此操作,因为控件上有许多其他依赖项是列表框。

最终,我希望每个列表项由3个不同的URL组成,所以:

这将是HTML:

<ul>
  <li><a href="http://www.google.com">Url1</a><a href="http://www.yahoo.com">Url2</a><a href="http://www.bing.com">Url3</a></li>
</ul>

所以在我的ASPX页面中,我维护已经存在:

<asp:BulletedList ID="lstDashboards" runat="server" DisplayMode="Text"</asp:BulletedList>

在后面的代码中,我有以下内容填充列表:

private void GuiSideMenuBuild(Int64 aUserId)
{
    //Always clear any dashboards
    lstDashboards.Items.Clear();

    //Get the dashboards from the database
    DashboardsForUserGetDto userDashboards = DashboardBL.Instance.DashboardsForUserGet(Convert.ToInt32(aUserId));

    const string HREF_DASHBOARD_EDIT = "<a href=\"#\" id=\"edit-dashboard-link\" class=\"dialog-link\">Edit...</a>";
    const string HREF_DASHBOARD_DELETE = "<a href=\"#\" id=\"delete-dashboard-link\" class=\"dialog-link\">Delete...</a>";

    foreach (TableDashboardDashboardDtoBase userDashboard in userDashboards.Dashboards)
    {
        string listItemText = userDashboard.Title;
        if (userDashboard.DashboardId == DashboardId)
            listItemText += HREF_DASHBOARD_EDIT + HREF_DASHBOARD_DELETE;

        ListItem listItem = new ListItem
            {
                Text = listItemText,
                Value = Convert.ToString(userDashboard.DashboardId),
                Selected = userDashboard.DashboardId == DashboardId
            };
        lstDashboards.Items.Add(listItem);
    }
}

然而,控件生成的HTML已经转义了所有提供的HTML,因此我最终得到了类似的内容:

&lt;&lt;a href=&quot;#&quot; id=&quot;...

表示生成的HTML“已损坏”且URL无效。所以我的问题是:

如何继续使用现有的列表框(即asp:BulletedList),但为项目提供Text,以便生成有效的HTML,以便我可以拥有3个单独的URL?

在将字符串添加到listItem.Text之前,我已经尝试过对HTML字符串进行编码,但这并没有什么区别。

1 个答案:

答案 0 :(得分:0)

我认为这里不需要UserControl - 你不使用任何服务器端组件,你只是生成标记。为什么不在你的.aspx页面中这样做呢?

<ul>
<% foreach (TableDashboardDashboardDtoBase userDashboard in userDashboards.Dashboards)
{
%>
  <li><a href="http://www.google.com">Url1</a><a href="http://www.yahoo.com">Url2</a><a href="http://www.bing.com">Url3</a></li>
<%
}
%>
</ul>

要么是,要么使用转发器:

<强> HTML

<asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate><ul></HeaderTemplate>
    <ItemTemplate><li><a href="http://www.google.com">Url1</a><a href="http://www.yahoo.com">Url2</a><a href="http://www.bing.com">Url3</a></li></ItemTemplate>
    <FooterTemplate></ul></FooterTemplate>
</asp:Repeater>

代码背后

Repeater1.DataSource = userDashboards.Dashboards
Repeater1.DataBind()