2010-02-01 47 views
1

我想動態地在我的div上添加HTML。 我這樣做有:div中的InnerHTML動態 - ASP中的HyperLink問題

  newsAllScroller.InnerHtml = newsAllScroller.InnerHtml + "<br><center><b>"; 
      List<DAL.News> newsList = DAL.NewsHandler.GetAllNews(); 
      foreach (DAL.News n in newsList) 
      { 
       newsAllScroller.InnerHtml = newsAllScroller.InnerHtml + "<br>" + n.Betreff + " - (" 
        + "<asp:HyperLink ID=\"news"+n.NewsID+"\" runat=\"server\" NavigateUrl=\"~/News.aspx?id=" + n.NewsID + "\"" 
        + " CssClass=\"newsLink\">" 
        + "..." 
        + "</asp:HyperLink>" 
        + ")"; 
      } 
      newsAllScroller.InnerHtml = newsAllScroller.InnerHtml + "</center></b>"; 

的超級鏈接不工作(不能點擊)。

當我將超鏈接從瀏覽器源代碼複製到aspx頁面時,它的工作原理似乎是正確的 - 但它沒有通過代碼工作,爲什麼?

回答

2

不能服務器端控件添加到HTML,並認爲它的正常行爲,你將不得不修改代碼以

newsAllScroller.InnerHtml = newsAllScroller.InnerHtml + "<br>" + n.Betreff + " - (" 
        + "<a href ="/News.aspx?id=" + n.NewsID + "\"" 
        + " class=\"newsLink\">" 
        + "... </a>" 
        + ")"; 
1

因爲在輸出發送到瀏覽器之前,aspx頁面只被解析一次。你不能打印/輸出一些東西,並期望它再次被解析。

+0

好的,該如何解決? – Kovu 2010-02-01 08:59:20

+0

您需要從代碼中調用HyperLink類,而不是使用asp標記。 – 2010-02-01 09:12:05

0

您應該使用Repeater,而不是添加文本InnerHtml。事情是這樣的:

<asp:Repeater ID="myRepeater" runat="server" OnItemDataBound="myRepeater_ItemDataBound"> 
    <ItemTemplate> 
     <br/><asp:Literal ID="myText" runat="server"/> - (<asp:HyperLink ID="myLink" runat="server" CssClass="newsLink" Text="..."/>) 
    </ItemTemplate> 
</asp:Repeater> 

...然後在後臺代碼:

void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     myRepeater.DataSource = DAL.NewsHandler.GetAllNews(); 
     myRepeater.DataBind(); 
    } 
} 

void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || 
     e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var myText = e.Item.FindControl("myText") as Literal; 
     var myLink = e.Item.FindControl("myLink") as HyperLink; 
     var news = e.Item.DataItem as DAL.News; 
     if (myText != null && myLink != null && news != null) 
     { 
      myText.Text = news.Betreff; 
      myLink.NavigateUrl = "~/News.aspx?id=" + news.NewsID; 
     } 
    } 
} 

我還沒有嘗試過的代碼自己,但它應該指向你在正確的方向。查看Repeater documentation瞭解更多信息和示例。