在运行时期间从.cs文件向asp .net表单添加控件

时间:2011-07-04 14:54:22

标签: asp.net controls runtime

我有一个网站(使用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;

}

但是当我运行代码时,我看不到页面上的控件。 我错过了什么吗? 谢谢!

5 个答案:

答案 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();

查看http://www.w3schools.com/ASPNET/aspnet_repeater.asp

答案 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>

所以您似乎没有发布足够的信息来回答您的问题?