从后面的代码创建Image和PlaceHolder - 动态

时间:2012-08-08 09:23:14

标签: asp.net image dynamic placeholder

我想从我的数据库中读取图像,但它们必须在无序列表中。 我有一个Handler确实得到了imgUrl的来源

s+= "< ul>";
while (reader.Read())
{
    id = reader.GetInt32(0);
    s += "< li>< div>";
    s += "< a href='#'>< img src='~/Handlers/ShowImage.ashx?id=" + id + "'/>< /a>";
    s += "</ div></ li>";
}
s+="< /ul>";

之后我使用在aspx中声明的Literal来传递这段html代码。

myLiteral.text = s;

问题是:我的处理程序永远不会执行,所以我永远不会得到img源代码。 为了解决这个问题,我开始使用PlaceHolder来代替标记“&lt; img ... /&gt;”。

所以我有:

while (reader.Read())
{
    id = reader.GetInt32(0);

    PlaceHolder holder = new PlaceHolder();
    Image img = new Image();
    img.ImageUrl = "~/Handlers/ShowImage.ashx?id=" + id;
    holder.Controls.Add(img);

    s += " li div";
    s += " a href='" + reader.GetString(1) + "'" + holder + " /a";
    s += " /div /li";
}

这样处理程序执行但我的持有者只是传递.toString():S

有人帮我吗?而且,这是我想要的最佳方式吗? 感谢。

2 个答案:

答案 0 :(得分:1)

请尝试....

  StringWriter sw = new StringWriter();
  HtmlTextWriter htw = new HtmlTextWriter(sw);
  holder.RenderControl(htw);
  string s = sw.ToString();

“s”就是你想要的。

答案 1 :(得分:0)

你能否澄清一下你的问题?

  • 当你说你有一个处理程序时...那是一个HttpHandler?
  • 您的代码在哪里运行?它是在您的页面的代码隐藏?它是什么方法?

此外,如果您想自己呈现HTML字符串,建议您使用StringBuilder类而不仅仅是“s + =”

谢谢!