ASP.NET UserControl - нулевая ссылка? - PullRequest
4 голосов
/ 02 декабря 2011

У меня проблема с пользовательским контролем.Внутри у меня есть флажок управления.Я хочу создать этот пользовательский элемент управления на лету и вставить его в элемент управления asp: table.

        MyControl pp = new MyControl();

        pp.pageNameCb.Text = "lorem";

        TableCell tc = new TableCell();
        tc.Controls.Add(pp);
        table.Rows[0].Cells.Add(tc);

Но значение pageNameCb равно нулю, даже если я создаю его экземпляр вручную, на моем экране ничего не отображаетсяТаблица.Почему?

Вот мой код:

   <asp:View ID="new_role_view" runat="server">
        <asp:Table ID="table1" runat="server">
           <asp:TableRow ID="TableRow1" runat="server">
              <asp:TableCell ID="TableCell1" runat="server">

              </asp:TableCell>
           </asp:TableRow>
        </asp:Table>
    </asp:View>

Затем, если я изменю это представление, я создаю свой элемент управления:

        MyControl pp = new MyControl();
        table.Rows[0].Cells[0].Controls.Add(pp);

Page_Init MyControl:

    protected void Page_Init(object sender, EventArgs e)
    {
        if (pageNameCb == null)
            pageNameCb = new CheckBox();
        pageNameCb.Text = "works";
    }

и все равно ничего не показывает

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Это код, который должен нормально работать, если ваш пользовательский элемент управления создан в соответствии с ASP.net Page Cycle.

Инициализировать флажок в событии Page_Init () элемента управления пользователя, если вы добавляете этот флажок динамически. и предоставьте немного ID вашему контролю.

 private Table CreateHtmlTable()
        {
            Table table = new Table();
            table.Rows.Add(new TableRow());          

            TableCell tc = new TableCell();
            MyControl pp = new MyControl();
            pp.ID = "SomeID";
            pp.pageNameCb.Text = "lorem";
            tc.Controls.Add(pp);
            table.Rows[0].Cells.Add(tc);

            return table;
        }

Это код, который отлично работает для меня ...

ASPxLabel lbl = new ASPxLabel();
lbl.ID = "lblTopicName";
lbl.Text = "TopicName";
table.Rows[0].Cells[0].Controls.Add(lbl);
0 голосов
/ 02 декабря 2011

Когда вы создаете свой пользовательский элемент управления, вы одновременно устанавливаете флажок? Он будет нулевым, если флажок не создан в какой-то момент. Если бы это был пользовательский элемент управления, который вы бы создали в Control.CreateChildControls - так как это может быть пользовательский элемент управления в конструкторе или пользовательский метод - Init () или что-то подобное.

Также я бы создал пользовательский элемент управления в Page_Init, а затем добавил бы его в дерево элементов управления, иначе он не будет участвовать в ViewState страницы.

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