如何将Datarow数组值传递给javascript

时间:2010-08-19 20:45:48

标签: c# javascript

我是Datarow Collection字符串数组。我想将这个数组传递给javascript并对它们进行操作。我该怎么做

2 个答案:

答案 0 :(得分:2)

我建议使用DataContractJsonSerializer

这是一个简单的函数,可以将任何可序列化的对象转换为JSON:

using System;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;

public static string ToJson<T>(this T input)
{
    var serializer = new DataContractJsonSerializer(typeof(T));
    using (var stream = new MemoryStream())
    {
        serializer.WriteObject(stream, input);
        var jsonText = Encoding.UTF8.GetString(stream.ToArray());
        return jsonText;
    }
}

以下是我在string[]上使用它的示例:

static void Main()
{
    var input = new[] { "one", "two", @"three ""with quotes""!", "↑" };
    Console.WriteLine(input.ToJson());
    Console.ReadLine();
}

正如预期的那样输出:

["one","two","three \"with quotes\"!","↑"]

现在,在您的问题中,您提到DataRow,因此您需要将DataRow对象转换为可在此处传递的内容。我认为ItemArray属性正是​​您所寻找的:

public string DataRowToJson(DataRow dr)
{
    return dr.ItemArray.ToJson();
}

答案 1 :(得分:0)

除了HTML之外,没有什么可以阻止你使用ASP.NET控件。我经常发现自己使用转发器来创建Javascript数组。

<script type="text/javascript">

<asp:Repeater ID="WhateverRepeater" runat="server">
    <HeaderTemplate>
var data = [
    </HeaderTemplate>
    <ItemTemplate>"<%# Container.DataItem %>"</ItemTemplate>
    <SeparatorTemplate>, 
    </SeparatorTemplate>
    <FooterTemplate>
];
    </FooterTemplate>
</asp:Repeater>

</script>

将您的数据绑定到该转发器,它将转储出一个Javascript数组,如下所示:

var data = [
    "string0",
    "string1",
    "string2",
    "string3"
];

然后,您可以像在任何其他JS数组中一样在客户端代码中使用它。

(在没有编译器存在的情况下执行此操作,因此某些细节可能已关闭)