Выпадающий список не отображается в форме - PullRequest
0 голосов
/ 17 апреля 2011

Я добавляю серию выпадающих списков, заполненных из базы данных, на страницу из кода позади.Поскольку мне нужно переменное количество разделов, каждое из которых содержит переменное количество раскрывающихся списков, мне нужно выполнить свои запросы, а затем поместить сборку и поместить HTML-код прямо на страницу.Я уверен, что есть лучший способ сделать это (возможно, вложенные повторители), но он работает .Мой HTML-код:

Question

<input type='hidden' id='h100' />
   <select id='q100'>
      <option>Answer 1</option>
      <option>Answer 2</option>
      <option>Answer 3</option>
  </select>

Однако, когда страница возвращается обратно, я не получаю эти поля в коллекции форм.Это действительно странно, потому что они, казалось, были там вчера, но потом я возвращаюсь на страницу и не могу их найти.

Почему бы их не появиться в коллекции форм после POST?

Я использую C # для кода, любая помощь очень ценится.

Редактировать: Вот мой код (пожалуйста, не делайте мне больно, я изучаю ASP.NET, как я иду):

if (!Page.IsPostBack)
    {
       // Much stuff that works fine, connecting to database, etc.

            // Get matching questions - variables
            ArrayList matchingSections = new ArrayList();
            int matchingSectionCount;

            // Get count of matching sections 
            OracleCommand cmdMatchSectCount = new OracleCommand("Select Count(distinct matching_section) From graphite.question Join graphite.q_matching Using(q_id) Where t_id = " + Session["TestTaking"].ToString(), conn);
            OracleDataReader drMatchSectCount = cmdMatchSectCount.ExecuteReader();
            drMatchSectCount.Read();
            matchingSectionCount = (int)drMatchSectCount.GetOracleNumber(0).Value;
            Session["MatchingSectionCount"] = matchingSectionCount;

            // Get matching sections
            OracleCommand cmdMatchSects = new OracleCommand("Select Distinct matching_section From graphite.question Join graphite.q_matching Using(q_id) Where t_id = " + Session["TestTaking"].ToString() + " Order By matching_Section", conn);
            OracleDataReader drMatchSects = cmdMatchSects.ExecuteReader();

            for(int i = 0; i < matchingSectionCount; i++)
            {
                drMatchSects.Read();
                matchingSections.Add(drMatchSects.GetOracleString(0).Value);
            }

            foreach (String s in matchingSections)
            {
                string row = string.Empty;
                int questionCount;
                ArrayList answers = new ArrayList();

                matchManual.InnerHtml += "\n<h2>Matching Section - " + s + "</h2>";
                matchManual.InnerHtml += "\n<table>";

                OracleCommand cmdQuestionCount = new OracleCommand("Select Count(correct_answer) From graphite.question Join graphite.q_matching Using(q_id) Where t_id = " + Session["TestTaking"].ToString() + " and matching_section = '" + s + "'", conn);
                OracleDataReader drQuestionCount = cmdQuestionCount.ExecuteReader();
                drQuestionCount.Read();
                questionCount = int.Parse(drQuestionCount.GetOracleNumber(0).Value.ToString());

                OracleCommand cmdMatchAnswers = new OracleCommand("Select correct_answer From graphite.question Join graphite.q_matching Using(q_id) Where t_id = " + Session["TestTaking"].ToString() + " and matching_section = '" + s + "' Order By correct_answer", conn);
                OracleDataReader drMatchAnswers = cmdMatchAnswers.ExecuteReader();
                for (int i = 0; i < questionCount; i++)
                {
                    drMatchAnswers.Read();
                    answers.Add(drMatchAnswers.GetOracleString(0).Value.ToString());
                }

                OracleCommand cmdMatchLoop = new OracleCommand("Select q_phrase, q_id From graphite.question Join graphite.q_matching Using(q_id) Where t_id = " + Session["TestTaking"].ToString() + " and matching_section = '" + s + "'", conn);
                OracleDataReader drMatchLoop = cmdMatchLoop.ExecuteReader();
                for (int i = 0; i < questionCount; i++)
                {
                    drMatchLoop.Read();
                    row += "\n  <tr>";
                    row += "\n    <td>" + drMatchLoop.GetOracleString(0).Value ;

                    row += "<input type='hidden' id='h" + drMatchLoop.GetOracleNumber(1).Value.ToString() + "' />";
                    row += "\n    </td>";
                    row += "\n    <td>";
                    row += "\n      <select id='q" + drMatchLoop.GetOracleNumber(1).Value.ToString() + "' runat='server'>";

                    foreach(string answer in answers)
                    {
                        row += "\n        <option>" + answer + "</option>";
                    }

                    row += "\n      </select>";
                    row += "\n    </td>";

                    row += "\n  </tr>";
                }

                matchManual.InnerHtml += row;
                matchManual.InnerHtml += "\n</table>\n\n";
   }

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Ничего себе. Просто вау. С <select> вы должны включить name='value', а не id='value'. Мораль: знай свой HTML. И старайтесь изо всех сил, чтобы избежать выкидывания необработанного HTML на страницу.

1 голос
/ 17 апреля 2011

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

@ edited

Ага - так что это было внутри формы, теперь вы видите, что причиной является отсутствующий атрибут имени в теге выбора!

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

0 голосов
/ 17 апреля 2011

Я думаю, что ваше Page.IsPostBack состояние является источником проблем. Поскольку вы генерируете элементы только в! IsPostback => только «в первый раз», а не после записи => они отсутствуют после публикации.

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