добавление элементов управления в форму asp .net из файла .cs во время выполнения - PullRequest
0 голосов
/ 04 июля 2011

У меня есть сайт (сборка с 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 голосов
/ 04 июля 2011

Не ответ, но следующий урезанный образец работает для меня:

<%@ 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>

Похоже, вы не опубликовали достаточно информации, чтобы ответить на ваш вопрос?

0 голосов
/ 04 июля 2011

Вы должны присвоить элемент управления форме ДО установки свойств.

Например:

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

ОБНОВЛЕНИЕ:

Я только что создал новый проект веб-приложения со страницей, на которой была только кнопка;это сработало, как и ожидалось.Я предлагаю вам что-то еще происходит.См. Ниже:

<%@ 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";
            }
        }
    }
}
0 голосов
/ 04 июля 2011

Когда вы создаете динамические элементы управления в веб-форме, элементы управления должны быть созданы и добавлены в коллекцию элементов управления либо в OnInit, либо в событиях Page_Load.

Пожалуйста, обратитесь к этому вопросу чтобы решить вашу проблему.

0 голосов
/ 04 июля 2011

Вы можете попробовать то, что говорит AndyPeacock, но, глядя на ваш код, я думаю, что вам нужно изучить на самом деле Repeaters и другие элементы управления с привязкой к данным, такие как DataListView.

Вот краткий пример того, как вы могли бы реализовать это с помощью повторителя:

В вашем файле 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

0 голосов
/ 04 июля 2011

Попробуйте добавить элемент управления заполнителем на форму. Тогда вместо вызова Form1.Controls.Add (....) используйте PlaceHolder1.Controls.Add (.....)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...