Использование C # для итерации полей формы с тем же именем - PullRequest
6 голосов
/ 06 апреля 2010

У меня есть раздел формы, который мне нужно обрабатывать иначе, чем остальные результаты формы. В разделе, который требует специальной обработки, мне нужно перебрать 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.

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

Ответы [ 4 ]

12 голосов
/ 06 апреля 2010

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

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

0 голосов
/ 06 апреля 2010

Я бы предложил добавить каждую форму в список и использовать вместо этого оператор 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 голосов
/ 06 апреля 2010

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

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

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

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

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

0 голосов
/ 06 апреля 2010

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

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