【问题标题】:passing c# array to java script将 c# 数组传递给 javascript
【发布时间】:2013-05-25 20:58:48
【问题描述】:

我在 c# 中的 page_load 中有一个数组,我想在 java 脚本中访问它但不知道该怎么做..

float [] energyArray = new float[count];
for (int i = 0; i < count; i++)
{
    energyArray[i] = energyObj[i].FwdHr;
}

现在我想用 javascript 代替数据访问-

series: [{
    name: 'Tokyo',
    data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
}]       

【问题讨论】:

  • 您可以将系列作为字符串存储在 HiddenField 中,然后在 javascript 中将其拆分
  • 我猜你可能会用它来显示高图表,我通常在 .cs 页面中使用它.... Page.ClientScript.RegisterStartupScript(typeof(Page), "abc", stringARRAY );

标签: c# javascript asp.net json


【解决方案1】:

一个非常简单的方法是使用JavaScriptSerializer 类将您的 C# 对象转换为 JSON:

C#

float [] energyArray = new float[count];
for (int i = 0; i < count; i++)
   {
       energyArray[i] = energyObj[i].FwdHr;
   }

Javascript:

var dataArray = <%=new JavaScriptSerializer().Serialize(energyArray);%>;
var series = [{
            name: 'Tokyo',
            data: dataArray
        }];

【讨论】:

  • javascript 序列化程序在哪里。要导入它?? @Blade0rz
  • 来自链接的 MSDN 页面:System.Web.Extensions(在 System.Web.Extensions.dll 中)
  • 不明白..你知道在vs2010中在哪里更改目标框架吗?
  • 谢谢,但如何处理错误 - 找不到 javascriptSerializer?我应该将它包含在 javascript 中,但如何?
【解决方案2】:

在这里稍微改变你的问题......

考虑构造整个 javascript 字符串块,然后使用 Page.RegisterClientScriptBlock,而不是操作已经存在的脚本。

http://msdn.microsoft.com/en-us/library/system.web.ui.page.registerclientscriptblock.aspx

int[] yourArray = new int[] { 1, 2, 3 };
string arrElements = string.Join(",", yourArray.Select(x => x.ToString()).ToArray());
string strJs = string.Format("var yourArray=[{0}]", arrElements);
RegisterClientScriptBlock("Test", strJs);

【讨论】:

    【解决方案3】:

    您需要以某种方式将数组传递给客户端(即 javascript 部分):

    我建议向页面发出 ajax 请求,该请求将返回序列化数组,或者按照@Blade0rz 的建议,将序列化字符串直接输出到页面。要将数组序列化为 JSON 格式,您可以调用 JavaScriptSerializer 类的方法:

    更多信息here

    【讨论】:

      【解决方案4】:

      声明一个隐藏字段

          <asp:HiddenField id="myHiddenField" runat="server"
      

      在后面的代码中将它的值设置为你的 array.Tostring() 然后在你的javascript中

          var h = document.getElementById('myHiddenField');
          //Should give you an array of strings that you can cast to integers 
      

      【讨论】:

        【解决方案5】:

        背后的 C# 代码:

        float [] energyArray = new float[count];
         public JavaScriptSerializer javaSerial = new JavaScriptSerializer();
        

        试试这个代码:

        <script>
        var a = <%= this.javaSerial.Serialize(this.energyArray) %>;
        for (var i = 0; i < a.length; i++) {
                console.log(a[i]);
            }
         </script>
        

        【讨论】:

        • javaSerial 不是 C# 函数
        • 因为 javaSerial 不是 C# 函数,而您是在 C# 中调用它 -- 这不会编译。
        • @Hogan 请参考这个问题和答案:stackoverflow.com/questions/14942385/…
        • 该代码与此答案无关,如果您想在其中包含所有代码,那么它可能是一个正确的答案,但就目前而言,这个答案是错误的并得到-1。修复它,我将删除反对票。
        猜你喜欢
        • 2013-02-03
        • 2012-02-10
        • 2020-09-03
        • 1970-01-01
        • 2012-08-23
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多