2012-10-26 6 views
3

오늘까지는 일반 텍스트 용으로 작성되어 사용되는 ASP.NET 글 머리 기호 목록 컨트롤이 있습니다. 새로운 디자인 요청은 이러한 항목 중 일부를 하이퍼 링크로 전환하도록 요청합니다. 따라서 글 머리 기호 목록에는 궁극적으로 일반 텍스트 항목과 일부 하이퍼 링크가 포함되어야합니다. DisplayMode = Hyperlink로 변경하면 값을 비워 두더라도 일반 텍스트 여야하는 항목은 여전히 ​​클릭 가능한 링크가됩니다.프로그래밍 방식으로 글 머리 기호 목록에 하이퍼 링크 추가 DisplayMode = 하이퍼 링크

내가 할 수 있다고 생각하는 솔루션 중 하나는 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(); 
그래서 언젠가 다음 10 년 같은 시나리오에서 자신을 발견 하나 또는 두 개의 손실과 혼란 영혼, 여기 아래에 제공되는 우수한 답변을 내 완벽하게 구현입니다

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 페이지의 머리에서 :

,938 끝에있는 데이터 바인딩이 ---이 필요

참고 데이터 바인딩 이벤트에 해당하는

if 문은 "data-url"속성이있는 항목 만 링크로 설정하고 모든 항목을 링크로 변환하지 않도록해야합니다.

답변

2

<asp:Repeater />을 사용하는 것이 더 쉽습니다.

뭔가 같이 : 데이터가 BulletedList

를 바인딩 할 때

DataValueField에 URL 값을 설정

<asp:Repeater ID="Repeater1" runat="server"> 
    <HeaderTemplate><ul></HeaderTemplate> 
    <ItemTemplate> 
     <li><%# string.IsNullOrEmpty(Eval("url").ToString()) ? Eval("text") : string.Format("<a href=\"{0}\">{1}</a>", Eval("url").ToString(), Eval("text").ToString()) %></li> 
    </ItemTemplate> 
    <FooterTemplate></ul></FooterTemplate> 
</asp:Repeater> 

Hackalicious 방법의 항목을 반복하는 DataBound 이벤트를 사용하여 속성을 추가 URL 값이있는 각 URL로

,

사용 자바 스크립트/jQuery를 필요한 마크 업을 적용합니다 :

$('[data-url]').each(function() { 
    var $this = $(this); 
    $this.html('<a href="' + $this.attr('data-url') + '">' + $this.text() + '</a>'); 
}); 

이 jQuery를 테스트하지 않았다하지만 가까이

+0

감사해야합니다. 그래, 내 최후의 수단은 그것을 Repeater 나 Literal 같은 다른 컨트롤로 바꾸는 것이다. BulletedList를 참조하는 많은 코드가 있기 때문에 나는 단지 BulletedList를 유지할 수 있도록 해킹 정도에 상관없이 솔루션을 찾고 있습니다. – CptSupermrkt

+0

은 "hackiness"방식으로 업데이트되었습니다. – MikeM

+0

고마워요! 나는 당신의 아이디어를 사용하고 일하는 해결책을 구현할 수있었습니다.위의 원래 질문을 세부적인 구현으로 편집했습니다. 다시 한번 감사드립니다. – CptSupermrkt