我有一个网站(使用asp .net构建),我想在运行时添加一些文本和图片(我之前不知道数量)。
在用户选择参数后,他单击一个按钮,该按钮调用以下代码(在.cs文件中):
foreach (var car in cars)
{
Label lbl = new Label ();
form1.Controls.Add(lbl);
lbl.Text = car.name;
Image myImage = new Image ();
form1.Controls.Add(myImage);
myImage.ImageUrl = car.imageURL;
}
但是当我运行代码时,我看不到页面上的控件。 我错过了什么吗? 谢谢!
答案 0 :(得分:0)
尝试在表单中添加占位符控件。然后,而不是调用Form1.Controls.Add(....)使用PlaceHolder1.Controls.Add(.....)
答案 1 :(得分:0)
在Web窗体上创建动态控件时,必须创建控件并将其添加到OnInit或Page_Load事件中的控件集合中。
请参阅this question以解决您的问题。
答案 2 :(得分:0)
你可以尝试AndyPeacock所说的但是看看你的代码我觉得你需要研究的是实际上是Repeater和其他数据绑定控件,比如DataListView。
以下是如何使用Repeater实现此功能的快速示例:
在ASPX文件中:
<asp:Repeater ID="RepCars" runat="server">
<ItemTemplate>
<%# Eval("name") %>
<img src='<% Eval("imageURL") %>' alt="" />
</ItemTemplate>
</asp:Repeater>
在你的.CS部分,可能在Page_Load:
RepCarImages.DataSource = cars;
RepCarImages.DataBind();
答案 3 :(得分:0)
您必须在设置窗口的属性之前将控件分配给窗体。
例如:
foreach (var car in cars){
Label lbl = new Label ();
form1.Controls.Add(lbl); // Create and immediately assign
lbl.Text = car.name; // now you can set some properties
Image myImage = new Image ();
form1.Controls.Add(myImage); // Ditto
myImage.ImageUrl = car.imageURL;
}
更新:
我刚刚创建了一个全新的Web应用程序项目,其页面上只有一个按钮;它按预期工作。我建议你还有其他事情要做。见下文:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</div>
</form>
</body>
</html>
和背后的代码:
namespace WebApplication1 {
public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
}
protected void Button1_Click(object sender, EventArgs e) {
for (Int32 i = 0; i < 10; i++) {
Label lbl = new Label();
form1.Controls.Add(lbl);
lbl.Text = "HAHAHAHAH";
}
}
}
}
答案 4 :(得分:0)
不是答案,但以下精简样本适用于我:
<%@ Page Language="C#" AutoEventWireup="true" %>
<html>
<head runat="server"></head>
<body>
<form id="form1" runat="server">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
var lit = new Literal();
Controls.Add(lit);
Controls.Add(new Literal() { Text = "aaaa" });
lit.Text = "some text -- ";
}
</script>
<asp:Button ID="Button1" runat="server" Text="Button"
onclick="Button1_Click" />
</form>
</body>
</html>
所以您似乎没有发布足够的信息来回答您的问题?