我想在我的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页面时,它的工作原理是正确的 - 但它通过代码无法正常工作,为什么?
答案 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以获取更多信息和示例。