我有,直到今天,创建并只对纯文本使用ASP.NET项目符号列表控制。 新的设计要求问,我把部分这些项目为超链接。 因此,项目符号列表将最终需要包含一些纯文本的项目,以及一些超链接。 如果我将其更改为DISPLAYMODE =超链接,即使我离开值为空,该条目应该只是纯文本仍然成为可点击的链接。
一个解决方案,我认为我可以做的工作,就是用文字控制和使用HTML( <a href...
上需要被连接线)。 这将需要重新工作的一些旧的代码一点点,所以我才尝试,我真的想知道这是否可能与现有的BulletedList做。
编辑:
我认真地到处都找不到这事,我一般认为自己是一个相当不错的Google员工。 所以对于一个或两个失落和迷惘的灵魂谁发现自己在某个时候,在未来十年同样的场景,这里是我下面所提供的出色答卷的完整实现:
在页面的后台代码:
foreach (SupportLog x in ordered)
{
blschedule.Items.Add(new ListItem(x.Headline, "http://mysite/Support/editsupportlog.aspx?SupportLogID=" + x.SupportLogID));
}
blschedule.DataBind();
注意在末尾的DataBind ---这是必要陷入DataBound事件:
protected void blschedule_DataBound(object sender, EventArgs e)
{
foreach (ListItem x in blschedule.Items)
{
if (x.Value.Contains("http")) //an item that should be a link is gonna have http in it, so check for that
{
x.Attributes.Add("data-url", x.Value);
}
}
}
在.aspx页面的头:
<script src="<%# ResolveClientUrl("~/jquery/jquery141.js") %>" type="text/javascript"></script>
<script>
$(document).ready(function () {
$('#<%=blschedule.ClientID %> li').each(function () {
var $this = $(this);
var attr = $this.attr('data-url');
if (typeof attr !== 'undefined' && attr !== false) {
$this.html('<a href="' + $this.attr('data-url') + '">' + $this.text() + '</a>');
}
});
});
</script>
if语句是必需的,以确保只把有“数据链接”属性为链接的项目,而不是把所有物品进入链接。