我有一個ASP.NET項目符號列表控件,直到今天,只有純文本創建和使用。一項新的設計要求要求我將這些項目中的一部分變成超鏈接。因此,項目符號列表最終需要包含一些純文本項目和一些超鏈接。如果我將它更改爲DisplayMode = Hyperlink,即使我將值留空,那麼應該只是純文本的條目仍然會變成可點擊的鏈接。編程添加一個超鏈接到不是顯示模式=超鏈接
我認爲我可以做的一個解決方案是使用Literal控件,並在需要鏈接的行上使用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語句確保只將具有「data-url」屬性的項目變爲鏈接,而不是將所有項目變爲鏈接。
謝謝。是的,我最後的手段是將其更改爲另一個控制器,如直放站或文字。我正在尋找一種解決方案,可以讓我保留BulletedList,因爲有很多引用BulletedList的代碼。 – CptSupermrkt
用「hackiness」方式更新:) – MikeM
非常感謝!我能夠使用你的想法並實施一個工作解決方案。我編輯了我的原始問題與詳細的實施。再次感謝。 – CptSupermrkt