I’m having problems passing an array parameter to my .ashx handler. Querystring parameters work fine, but I don’t know how to access the array from within the ashx file.
My array is a list of strings called list. This is how I call the getJSON method:
jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + a_sku, function (list) {
//...
});
In AccessoryUpdateHandler.ashx I can get the querystring parameter using context.Request.QueryString["a"];
But how do I get the array data? I’ve looked at the Request.QueryString object but there’s nothing there that looks like my array.
If there’s a better way of doing this I’d also be interested to know.
Perhaps you shouldn’t rely on QueryString to pass the kind of data. I would advice you to use “POST” method instead. In either case, using the approach you are using, you wont be able to pass the data as an array. Convert the array into a string. A utility like stringify() can come in handy here if you dont want to convert the array into a string manually. When you extract the string from the Request.QueryString or Request.Form (in case you use post) in the handler, you can easily use JavaScriptSerializer to deserialize using a simple C# class that has a schema similar to your json array.
Edited: Illustration
An array like:
can be converted to a string like:
then, your QueryString can be constructed as:
when you go to your handler code, you can have a simple class to help you deserialize the data:
with that in place, the last step to deserialize is:
Note you have to use Rec[] in the Deserialize function since you are deserializing into an array. ary will be an array of Rec with all your data from your javascript array. You need to reference System.Web.Extensions to use JavaScriptSerializer
EDIT:
I thought you were talking about an array of objects. If its just an array of *long*s, the following lines should be sufficient:
and you dont need to create a class. you would only need that if you had a array of json objects