使用Request.Form像PHP一样处理HTML输入元素的数组

时间:2010-12-30 10:02:38

标签: asp.net

如何在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 个答案:

答案 0 :(得分:30)

实际上,它与asp.net确实存在。 - 你可以用

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

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

答案 1 :(得分:4)

你可以使用标准的字符串拆分 - 这就是php在幕后为你所做的一切。 PHP不是强类型语言,但这意味着它们更容易提供此功能的“外观”。

现实情况是,php只允许您提供逗号分隔的输入,并自动为您分割。

所以...如果你想在asp.net中这样做,你可以多次使用相同的输入名称,它将作为逗号分隔列表与请求对象一起返回。我不建议将这种方法用于用户输入的输入,但是如果您控制输入,例如将列表组合到jquery脚本的隐藏输入中,它将正常工作。

要了解正在发生的事情(使用php也是如此......所有Web开发技术人员都在使用相同的http规则),只需尝试发布一个带有输入(不设置runat服务器)的表单,即两次。

<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(',');

如果你想要Integers或其他数据类型(php不知道/关心什么是数据类型),你将需要遍历它并将其解析为另一个数组/通用列表。

我不知道你想要什么作为最终结果,但了解浏览器发回的内容是第一步,简短的回答是......

是的,ASP.NET可以这样做(只需多一点手动)。

答案 2 :(得分:0)

这些输入数组。 HTML没有数组的概念。

这些只是具有相同名称的输入组。

你想要达到什么目的?你为什么不使用服务器端控件?


更新

您可以访问Request.Forms集合 - 它将保留已发布的表单元素。

或者,使用服务器端控件 - 您将能够通过ID访问这些控件。