Div动态中的InnerHTML - ASP中的HyperLink问题

时间:2010-02-01 08:43:10

标签: asp.net html

我想在我的div上动态添加HTML。 我这样做:

            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>";

HyperLink无效(您无法点击)。

当我将浏览器源代码中的超链接复制到一个aspx页面时,它的工作原理是正确的 - 但它通过代码无法正常工作,为什么?

3 个答案:

答案 0 :(得分:3)

您无法将服务器端控件添加到HTML并认为它的行为正常,您必须将代码修改为

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

答案 1 :(得分:1)

因为在将输出发送到浏览器之前只解析了一次aspx页面。您无法打印/输出某些内容并期望再次进行解析。

答案 2 :(得分: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以获取更多信息和示例。