Почему findcontrol нужен уникальный идентификатор, когда я дал ему строку для сканирования - PullRequest
0 голосов
/ 04 сентября 2010

код

    public partial class Table_Traversing : System.Web.UI.Page
        {
        Table table1 = new Table();

        Button button1 = new Button();

        protected void Page_Load(object sender, EventArgs e)
        {
            for (int adding_rows = 0; adding_rows < 4; adding_rows++)
               {
               TableRow table_row1 = new TableRow();
               TableCell table_cell1 = new TableCell();
               TableCell table_cell2 = new TableCell();
               Label The_text = new Label();
               CheckBox checkmate = new CheckBox();
               The_text.Text = "This is the text :-)";
               checkmate.ID = "checkmate";
               table_cell2.Controls.Add(checkmate);
               table_cell1.Controls.Add(The_text);
               table_row1.Controls.AddAt(0, table_cell1);
               table_row1.Controls.AddAt(1, table_cell2);
               table1.Rows.Add(table_row1);
               }
            button1.Text = "click me to export the value";
            form1.Controls.AddAt(0, table1);
            form1.Controls.AddAt(1, button1);
            button1.Click += new EventHandler(button1_Click);     
        }

        void button1_Click(object sender, EventArgs e)
        {
        CheckBox check_or_not = new CheckBox();
         for (int i = 0; i < table1.Rows.Count; i++)
            {
             check_or_not = (CheckBox)table1.Rows[i].FindControl("checkmate");
             Response.Write(check_or_not.Checked.ToString());
             }       
         }
      }

Ошибка

Обнаружено несколько элементов управления с одинаковым идентификатором 'checkmate'. FindControl требует, чтобы элементы управления имели уникальные идентификаторы.

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

Сведения об исключении: System.Web.HttpException: найдено несколько элементов управления с одинаковым идентификатором checkmate FindControl требует, чтобы элементы управления имели уникальные идентификаторы.

Ответы [ 2 ]

2 голосов
/ 04 сентября 2010

Просто добавьте номер строки к идентификатору:

checkmate.ID = "checkmate" + adding_rows.ToString();

И, конечно же, добавьте его к параметру FindControl:

check_or_not = (CheckBox)table1.Rows[i].FindControl("checkmate" + i.ToString());
0 голосов
/ 04 сентября 2010

Вы добавили флажок в ячейку, а не в строку:

table_cell2.Controls.Add(checkmate);

Следовательно - в одной строке несколько ячеек с идентификатором "checkmate":

* 1006 например *

<tr id="somerow">
   <td><input type="checkbox" id="checkmate"/></td>
   <td><input type="checkbox" id="checkmate"/></td>
</tr>

Таким образом, в строке "somerow" есть несколько флажков с идентификатором "checkmate".

Ваш код для добавления флажков, похоже, выглядит так, как будто вы только добавляете один из них - так что, должно быть, вы что-то упустили.

Попробуйте удалить код FindControl и посмотрите, какой фактический HTML-код отображается.

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