Используя C# для итерации полей формы с тем же именем

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

<td><input name="Color" size="20" value="" type="text"></td>
<td><input name="Color" size="20" value="" type="text"></td>
<td><input name="Color" size="20" value="" type="text"></td>

Используя C# я пробую что-то вроде этого:

Я пытаюсь обработать его как это:

int i;

for (i = 1; i <= Request.Form["Color"][i]; i++)
{
    colorName.Text += Request.Form["Color"];
}

Который приводит к следующему исключению:

System.NullReferenceException: Object reference not set to an instance of an object.

Как я должен обрабатывать поля формы с тем же именем?

6
задан womp 5 April 2010 в 21:12
поделиться

4 ответа

Либо Request.Form ["Color"] имеет значение null, либо colorName не найдено на странице aspx. Я не могу сказать, исходя из вашего кода. В остальном все выглядит правильно. Какой тип HTML-элемента имеет значение «Цвет»? Если это просто элемент html, убедитесь, что у вас есть атрибуты id и name.

-1
ответ дан 9 December 2019 в 22:31
поделиться

Важно помнить, что отправленные значения формы являются не чем иным, как коллекцией имя / значение, где значение представляет собой простую строку. Таким образом, не имеет большого смысла иметь несколько полей формы с одним и тем же именем. Я даже не знаю, разрешено ли это на самом деле.

Но, как вы говорите, вы не можете этого изменить. Я провел быстрый тест в IE и Chrome, и, по крайней мере, в этих браузерах кажется, что они отправляют несколько полей формы с тем же именем, что и строка, разделенная запятыми. Возможно, вы захотите протестировать еще немного, чтобы убедиться, что это поведение единообразно во всех браузерах.

Имея это в виду, вы могли бы сказать:

string colorValues = Request.Form["Color"];
string [] colors = colorValues.Split(',');

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

0
ответ дан 9 December 2019 в 22:31
поделиться

Вам не нужно делать никаких расколов или другой особой магии; вы можете просто получить массив строк из ASP.NET:

string [] values ​​= Request.Form.GetValues ​​("Color");

12
ответ дан 9 December 2019 в 22:31
поделиться

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

например,

private List<Request.Form> newList = new List<Request.Form>();

newList.Add(FormName1);
newList.Add(FormName2);
newList.Add(FormName3);

foreach(Request.Form form in newList)
{
   //perform logic
}

Примечание: я предполагаю, что Request.Form является имя класса для самой Формы.

Я сам не тестировал это, поэтому в нем может быть несколько ошибок, надеюсь, это в какой-то степени поможет.

0
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: