从Handler返回一个通用字符串列表到JS数组

时间:2011-10-28 17:21:43

标签: c# javascript asp.net arrays

尝试将此列表作为数组返回,以便我可以通过JS在客户端获取它并迭代其值。

因此我的一个.ashx方法在方法的末尾返回一个这样的列表:

equipmentTypes是字符串的通用列表

        _httpContext.Response.ContentType = "text";
        _httpContext.Response.Write(equipmentTypes.ToArray());

当我在客户端收到它时,我得到文字文本“System.String []”。那么我应该返回什么内容类型?显然这不正确。

然后我假设我可以将它评估为js侧的数组(对象)。

3 个答案:

答案 0 :(得分:4)

将数据发送到javascript时,您应该使用JSON。您不应该使用eval,因为这会让您面临许多安全漏洞(即XSS)。

有关C#和JSON的更多信息,请参阅此article,包括将C#数组转换为JSON。

答案 1 :(得分:1)

您应该将要写入响应流的对象序列化为JSON,其内容类型为application/json。您可以使用内置的DataContract serialization或第三方开源库,例如NewtonSoft JSON.Net库。

在客户端,您应该使用JSON.parse而不是eval

答案 2 :(得分:0)

在服务器端,您可以使用内置的JavaScriptSerializer

生成JSON
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
_httpContext.Response.ContentType = "application/json";
_httpContext.Response.Write(js.Serialize(equipmentTypes.ToArray()));

在客户端上,您可以使用JSON.parse(所有现代浏览器都支持)来获取阵列。当你控制客户端和服务器时,eval并不是真正的安全风险,但它仍然是错误的工具。