Вопрос о программно сгенерированных элементах управления: "? - PullRequest
0 голосов
/ 20 июня 2011
public partial class Default2 : System.Web.UI.Page
{
    Dictionary<int, Button> btnsDic = new Dictionary<int, Button>();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            for (int i = 0; i < 2; i++)
            {
                Button newBtn = new Button();
                newBtn.CommandName = i.ToString();
                newBtn.Text = i.ToString();
                newBtn.Command += Clicked;
                btnsDic.Add(i, newBtn);
                PlaceHolder p = new PlaceHolder();
                PlaceHolder1.Controls.Add(newBtn);
                //   p.Controls.Add(newBtn); 

            }
        }
        else
        {
            Button dsa = new Button();
            dsa.Text = "This medsa";
            PlaceHolder1.Controls.Add(dsa);
        }
    }

    void Clicked(object sender, CommandEventArgs  e)
    {
        foreach (var item in btnsDic)
        {
             if (e.CommandName==item.Key.ToString())
            {
                Label lebl = new Label();
                 lebl.Text="Button number: "+e.CommandName+" was pressed";
                 this.Controls.Add(lebl);
            }
        }

    }
}

Почему, если я создаю свою метку-заполнитель программно, а не использую метку-заполнитель, которая существует в моей веб-форме в виде тегов ... после обратной передачи на странице ничего не появляется?

Ответы [ 2 ]

0 голосов
/ 20 июня 2011

Хорошо, я думаю, что вы, возможно, неправильно ссылаетесь на свой заполнитель. Вы ссылаетесь на это так: -

            PlaceHolder p = new PlaceHolder();
            PlaceHolder1.Controls.Add(newBtn);

Но, может быть, вы должны попробовать это так: -

            PlaceHolder PlaceHolder1 = new PlaceHolder();
            PlaceHolder1.Controls.Add(newBtn);

Проверьте эту ссылку на MSDN для получения дополнительной информации http://msdn.microsoft.com/en-us/library/kyt0fzt1.aspx

0 голосов
/ 20 июня 2011

Вы вызываете PlaceHolder p = new PlaceHolder () в цикле. Это означает, что если бы это работало, только вторая кнопка была бы в заполнителе. Кроме того, вам нужно добавить новый заполнитель на странице. Поэтому вам нужно добавить элемент управления, уже размещенный на странице.

    if (IsPostBack)
    {
        PlaceHolder p = new PlaceHolder();
        PlaceHolder1.Controls.Add(p);
        for (int i = 0; i < 2; i++)
        {
            Button newBtn = new Button();
            newBtn.CommandName = i.ToString();
            newBtn.Text = i.ToString();
            newBtn.Command += Clicked;
            btnsDic.Add(i, newBtn);
            p.Controls.Add(newBtn); 
        }
    }
...