ashx中的getJSON数组参数数据

时间:2011-10-13 10:46:11

标签: c# jquery asp.net json getjson

我在将数组参数传递给我的.ashx处理程序时遇到问题。查询字符串参数工作正常,但我不知道如何从ashx文件中访问该数组。

我的数组是一个名为list的字符串列表。这就是我调用getJSON方法的方法:

jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + a_sku, function (list) {
            //...
        });

在AccessoryUpdateHandler.ashx中,我可以使用context.Request.QueryString["a"];获取查询字符串参数

但是如何获取阵列数据呢?我查看了Request.QueryString对象,但那里看起来就像我的数组。

如果有更好的方法,我也有兴趣知道。

2 个答案:

答案 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