Programowe dodanie hiperłącza do listy punktowanej, która NIE JEST DisplayMode = Hiperłącze

Mam kontrolkę listy punktowanej ASP.NET, która do dziś została utworzona i używana tylko dla zwykłego tekstu. Nowa prośba o projekt prosi, aby zamienić SOME tych elementów w hiperłącza. Dlatego lista wypunktowana będzie musiała zawierać kilka zwykłych elementów tekstowych i niektóre hiperłącza. Jeśli zmienię go na DisplayMode = Hiperłącze, nawet jeśli zostawię wartość pustą, wpisy, które powinny być zwykłym tekstem, nadal będą linkami klikalnymi.

Jednym z rozwiązań, które myślę, że mogę wykonać, jest użycie kontroli literalnej i użycie HTML (<a href...) na liniach, które muszą być linkami. To pociągnie za sobą trochę przepracowania starego kodu, więc zanim spróbuję, naprawdę chcę wiedzieć, czy jest to możliwe z istniejącą listą BulletedList.

EDYTOWAĆ:

Nigdzie nie mogłem znaleźć niczego na ten temat i generalnie uważam się za całkiem dobrego Googlera. Tak więc dla jednej lub dwóch zagubionych i zdezorientowanych dusz, które znajdują się w tym samym scenariuszu w następnej dekadzie, oto moja pełna realizacja doskonałej odpowiedzi przedstawionej poniżej:

W kodowaniu strony:

foreach (SupportLog x in ordered)
{
    blschedule.Items.Add(new ListItem(x.Headline, "http://mysite/Support/editsupportlog.aspx?SupportLogID=" + x.SupportLogID));
}

blschedule.DataBind();

Zwróć uwagę na DataBind na końcu --- jest to konieczne, aby wpaść w zdarzenie 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);
        }
    }
}

W nagłówku strony .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>

Instrukcja if jest wymagana, aby upewnić się, że tylko elementy, które mają atrybut „data-url”, są przekształcane w łącza, a nie zamieniają WSZYSTKIE elementy w łącza.

questionAnswers(1)

yourAnswerToTheQuestion