2010-05-05 88 views
16

在.NET中的HTTP请求中传递和处理数组的标准方式是什么?我有一个解决方案,但我不知道这是否是最好的方法。在.NET中的HTTP请求中传递数组值

这里是我的解决方案:

<form action="myhandler.ashx" method="post"> 
    <input type="checkbox" name="user" value="Aaron" /> 
    <input type="checkbox" name="user" value="Bobby" /> 
    <input type="checkbox" name="user" value="Jimmy" /> 
    <input type="checkbox" name="user" value="Kelly" /> 
    <input type="checkbox" name="user" value="Simon" /> 
    <input type="checkbox" name="user" value="TJ" /> 

    <input type="submit" value="Submit" /> 
</form> 

的ASHX处理程序接收“用户”参数作为一个逗号分隔的字符串。

public void ProcessRequest(HttpContext context) 
    { 
     string[] users = context.Request.Form["user"].Split(','); 
    } 

所以,我已经有一个回答我的问题:您可以通过分割字符串很容易得到的值赋给多个值相同的参数名称,承担ASHX处理程序接收它作为一个逗号分隔的字符串,并分割字符串。我的问题是这是否是通常在.NET中完成的。

这是什么标准做法?是否有一种更简单的方法来获取多个值,而不是假定值是逗号分隔的并在其上调用Split()?这是通常在.NET中传递数组,还是使用XML来代替?

有没有人有任何见识这是否是最好的方法?

回答

32

没有真正的标准,但你使用的是最接近它的。

但是,这些值实际上是而不是作为逗号分隔的字符串发送的,它们作为具有相同名称的单独值发送。从您的示例中的表单数据将是这样的:

user=Aaron&user=Bobby&user=Jimmy&user=Kelly&user=Simon&user=TJ 

你可以读出的值作为数组直接像这样:

string[] users = context.Request.Form.GetValues("user"); 

如果使用Form["user"]将串连为你和你的价值观不得不再次分裂他们。这只是浪费时间,并且如果任何值包含逗号,它也会中断。

+0

谢谢,这正是我正在寻找的信息。 因此,.NET框架足够智能,可以读取与数组同名的HTTP参数值,并且可以通过GetValues()将其作为数组或通过索引将其作为逗号分隔的字符串获取。 – 2010-05-05 21:46:13

+0

Thanks.That非常有用我得到了列表 usint。 – 2013-12-28 17:18:20

2

如果您使用复选框或多选列表框,则逗号分隔的一组值将是您从html自动获得的值。你在做什么是完美的。如果以其他方式在JavaScript中生成数组,则可以生成逗号分隔的字符串并将其分配给隐藏字段,并以相同的方式在服务器上使用split()。 XML当然是另一种选择,但如果你想要做的只是传递一个简单的数字或短字符串数组,那么对我而言似乎很复杂。 (当然,如果你需要传递的字符串值包含逗号,这会搞砸你的简单计划。)

+2

不,你不会从html表单中得到逗号分隔的值。如果您要求将它们作为单个值,则它是连接值的Request.Form集合。 – Guffa 2010-05-05 21:23:55

+0

是的 - 当然你是对的。感谢澄清。我指的是这些值通常在asp.net中访问的方式,我没有解释框架为我们做的转换。 – Ray 2010-05-05 21:30:16

+0

感谢您的提示。 – 2010-05-05 21:49:27