我在将数组参数传递给我的.ashx处理程序时遇到问题。查询字符串参数工作正常,但我不知道如何从ashx文件中访问该数组。
我的数组是一个名为list的字符串列表。这就是我调用getJSON方法的方法:
jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + a_sku, function (list) {
//...
});
在AccessoryUpdateHandler.ashx中,我可以使用context.Request.QueryString["a"];
获取查询字符串参数
但是如何获取阵列数据呢?我查看了Request.QueryString对象,但那里看起来就像我的数组。
如果有更好的方法,我也有兴趣知道。
答案 0 :(得分:0)
也许您不应该依赖QueryString来传递这种数据。我建议你改用“POST”方法。在任何一种情况下,使用您正在使用的方法,您将无法将数据作为数组传递。将数组转换为字符串。如果你不想手动将数组转换为字符串,像 stringify()这样的实用程序可以派上用场。当您在处理程序中从 Request.QueryString 或 Request.Form (如果您使用post)中提取字符串时,您可以轻松使用 JavaScriptSerializer 使用具有类似于json数组的模式的简单C#类反序列化。
编辑:插图
像:
这样的数组var ary = [{ "id": "1", "name": "Mark" }, { "id": "2", "name": "John"}];
可以转换为如下字符串:
var aryS = "[{\"id\":\"1\",\"name\":\"Mark\"},{\"id\":\"1\",\"name\":\"Mark\"}]";
然后,您的QueryString可以构造为:
jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + aryS, function (list) {
//...
});
当您转到处理程序代码时,您可以使用一个简单的类来帮助您反序列化数据:
class Rec
{
public int Id { get; set; }
public string Name { get; set; }
}
有了这个,反序列化的最后一步是:
string s = context.Request.QueryString["a"]; // HttpContext context
var jserializer = new JavaScriptSerializer();
var ary = jserializer.Deserialize<Rec[]>(s);
请注意,由于要反序列化为数组,因此必须在反序列化函数中使用Rec []。 ary 将是一个Rec数组,包含来自javascript数组的所有数据。您需要引用System.Web.Extensions以使用JavaScriptSerializer
编辑:
我以为你在谈论一系列物品。如果它只是* long * s的数组,则以下行应该足够了:
string s = context.Request.QueryString["a"]; // HttpContext context
var jserializer = new JavaScriptSerializer();
var ary = jserializer.Deserialize<long[]>(s);
你不需要创建一个类。如果你有一个json对象数组
,你只需要它答案 1 :(得分:0)
我不认为你需要传递数组应该决定你是否像其他人所说的那样使用get或post。
使用get,最常用的方法是多次使用相同的参数。 e.g。
Handlers/AccessoryUpdateHandler.ashx?a=1&a=2&a=55
实际上在大多数框架中(.NET都是例外)当你从url获取一个参数时,你得到一个数组返回(通常有一个项目)
我的建议是解析context.Request.RawUrl