Обработка массивов элементов ввода HTML с помощью Request.Form, как PHP - PullRequest
7 голосов
/ 30 декабря 2010

Как я могу правильно получить этот массив входов на asp.net?

<input type=hidden name='field[name][]' value='alex' />
<input type=hidden name='field[name][]' value='mark' />
<input type=hidden name='field[name][]' value='helen' />

<input type=hidden name='field[age][]' value='22' />
<input type=hidden name='field[age][]' value='30' />
<input type=hidden name='field[age][]' value='29' />

В php вы можете получить доступ к полю по $field = $_POST["field"]

$field["name"] и $field["age"] - это просто массивы, содержащие имена и возраст.

Ответы [ 3 ]

30 голосов
/ 13 февраля 2011

на самом деле, он существует с asp.net. - вы можете использовать

string[] MyTest = Request.Form.GetValues("MyTest");

или

string[] MyTest = Request.QueryString.GetValues("MyTest");
4 голосов
/ 26 января 2011

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

Реальность такова, что php просто позволяет вам вводить данные через запятую и автоматически разделяет их для вас.

Итак ... если вы хотите сделать это в asp.net, вы можете использовать одно и то же имя ввода несколько раз, и оно будет возвращено с объектом запроса в виде списка с разделителями-запятыми. Я бы не рекомендовал использовать этот подход для ввода, введенного пользователем, но он будет работать нормально, если вы управляете вводом, например объединением списка в скрытый ввод из сценария jquery.

Чтобы понять, что происходит (с php тоже .. все веб-разработчики используют одни и те же правила http), просто попробуйте опубликовать форму с вводом (не устанавливайте runat server), который там находится дважды.

<input type="text" name="MyTest" value="MyVal1" />
<input type="text" name="MyTest" value="MyVal2" />

На странице загрузки добавить это

if(IsPostBack)
{
   Response.Write(Request["MyTest"]);
}

Вы должны увидеть

MyVal1, MyVal2

На экране.

Теперь, если вы хотите это в массив, вы можете:

string[] myvals = Request["MyTest"].Split(',');

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

Я не знаю, чего вы хотите в качестве конечного результата, но понимание того, что браузер отправляет обратно, является первым шагом, и короткий ответ ...

Да, ASP.NET может сделать это (чуть больше вручную).

0 голосов
/ 30 декабря 2010

Это , а не массивы входов.В HTML нет концепции массивов.

Это просто группы входов с одинаковым именем.

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


Обновление:

Вы можете получить доступ к коллекции Request.Forms - она ​​будет содержать опубликованные элементы формы.

Альтернативно, используйте элементы управления на стороне сервера - вы сможете получить к ним доступ по идентификатору.

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