как получить доступ к контролю, который динамически добавляется на страницу со статическим ClientIDMode - PullRequest
1 голос
/ 10 июля 2011

У меня есть простая страница, которая имеет 1 PlaceHolder и 2 Button («добавить строку», «получить значение») и ничего больше. Когда я нажимаю кнопку добавления строки, я создаю динамическую таблицу и помещаю некоторый элемент управления в ее ячейку set ClientIDMoode = static:

private void CreateTableWithSession(bool FirstLoad)
{
    Table tbl;
    int Row;
    if (Session["tbl"]==null)
    {
        tbl = new Table();
    }
    else
    {
        tbl = (Table)Session["tbl"];
    }
    if (FirstLoad == true)
    {
        tbl.Rows.Clear();
    }
    //////////////////////////////////////////////////
    if (Session["Row"] == null)
    {
        Row = 0;
    }
    else
    {
        Row = int.Parse(Session["Row"].ToString());
    }
    if (FirstLoad == true)
    {
        tbl.Rows.Clear();
    }
    //////////////////////////////////////////////////

    TableRow tr1 = new TableRow();
    TableCell tc = new TableCell();

    TextBox txtBoxUserName = new TextBox();
    txtBoxUserName.ClientIDMode = System.Web.UI.ClientIDMode.Static;
    txtBoxUserName.Text = "0";
    Col++;
    txtBoxUserName.ID = "RowNo" + Row.ToString() + "ColumnNo" + Col.ToString();
    tc.Controls.Add(txtBoxUserName);
    tc.Width = 200;
    tc.VerticalAlign = VerticalAlign.Middle;
    tc.HorizontalAlign = HorizontalAlign.Center;
    tr1.Cells.Add(tc);

    tc = new TableCell();
    TextBox txtBoxPassword = new TextBox();
    txtBoxPassword.ClientIDMode = System.Web.UI.ClientIDMode.Static;
    txtBoxPassword.Text = "0";
    Col++;
    txtBoxPassword.ID = "RowNo" + Row.ToString() + "ColumnNo" + Col.ToString();
    tc.Controls.Add(txtBoxPassword);
    tc.Width = 200;
    tc.VerticalAlign = VerticalAlign.Middle;
    tc.HorizontalAlign = HorizontalAlign.Center;
    tr1.Cells.Add(tc);

    tbl.Rows.Add(tr1);

    Session["tbl"] = tbl;

    PlaceHolder1.Controls.Add(tbl);
}

и я хочу, чтобы когда пользователь нажимал кнопку «получить значение», получал 2 значения текстового поля (которые динамически добавлялись). Но каждый раз, когда он возвращает ноль.

TextBox txtBoxUserName = this.FindControl("RowNo1ColumnNo1") as TextBox;

как я могу это исправить и получить доступ к значениям текстового поля?

спасибо

1 Ответ

1 голос
/ 10 июля 2011

Динамически созданные элементы управления должны быть воссозданы, прежде чем вы сможете получить доступ, и я уверен, что вы не создаете элементы управления, когда вы нажимаете кнопку Get Value.Что-то будет работать для вас ...

protected void AddRow_Click(object sender, EventArgs e)
{
   CreateTableWithSession()
   ...................
}

protected void GetValue_Click(object sender, EventArgs e)
{
   CreateTableWithSession()
   TextBox txtBoxUserName = this.FindControl("RowNo1ColumnNo1") as TextBox;
   ........................
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...