【问题标题】:pass C# arraylist to Javascript将 C# 数组列表传递给 Javascript
【发布时间】:2012-08-23 21:50:52
【问题描述】:

我在 C# 中有一个 arrayList,我在其中存储 ip 和 isp 的数据,并从 mysql 表中计数如下,

ArrayList conRc = new ArrayList();

while (readIp.Read())
{
    string ipVal = readIp.GetString(0);
    string ispVal = readIp.GetString(1);
    int conLvlVal = readIp.GetInt32(2);

    conRc.Add(new ConfidenceLvl(ipVal,ispVal,conLvlVal));
}

这是我的 ConfidenceLvl 课程,

public class ConfidenceLvl
{
    private string ip;
    private string isp;
    private int conLvl;

    public string Ip
    {
        get { return ip; }
        set { ip = value; }
    }
    public string Isp
    {
        get { return isp; }
        set { isp = value; }
    }
    public int ConLvl
    {
        get { return conLvl; }
        set { conLvl = value; }
    }

    public ConfidenceLvl(string ipVal, string ispVal, int conLvlVal) {
        this.conLvl = conLvlVal;
        this.ip = ipVal;
        this.isp = ispVal;
    }
}

我想将它传递给 javascript,以便我可以利用这些值通过 jqPlot 创建图表。请帮助我使用this method 将我的值传递给javascript,但这一切都作为一个字符串。我想分别获取这些值并在 javascript 中使用它们。请帮我。非常感谢。

编辑: 感谢 Dominik Kirschenhofer,在成功解析到 javascript 后,我​​终于完成了这个。我可以知道如何操作这些数据吗?喜欢一一获取记录??我试过了,但没有成功,

    <asp:HiddenField ID="correlate" value= "" runat="server" />
    <script language="javascript" type="text/javascript">
        var jsonString = document.getElementById('correlate').value;
        var arr_from_json = JSON.parse(jsonString);

    </script>

json字符串如下,

    [{"Ip":"0","Count":"10"},{"Ip":"1","Count":"11"},{"Ip":"2","Count":"12"},{"Ip":"3","Count":"13"},{"Ip":"4","Count":"14"},{"Ip":"5","Count":"15"},{"Ip":"6","Count":"16"},{"Ip":"7","Count":"17"},{"Ip":"8","Count":"18"},{"Ip":"9","Count":"19"}] 

请问我该如何处理这些记录:)

编辑:解决了

    <asp:HiddenField ID="correlate" value= "" runat="server" />
    <script language="javascript" type="text/javascript">
        var jsonString = document.getElementById('correlate').value;
        jsonString = "{\"corrData\":" + jsonString + "}";
        var arr_from_json = JSON.parse(jsonString);
        alert(Number(arr_from_json.corrData[2].Ip)+1);
    </script>

我添加了 corrData 以便我可以像在数组中一样通过整数 ID 调用它。 :) 感谢你们的帮助 :) 如果有更好的方法..请告诉我 :)

【问题讨论】:

标签: c# javascript object arraylist


【解决方案1】:

如果您想要在 js 中使用的代码中有一个列表或一组固定值,则更简单的方法如您发布的链接中所述。意味着序列化列表并将其存储在隐藏字段中。当你需要在 js 中使用它时,只需反序列化并使用它即可。

序列化参见: http://blogs.microsoft.co.il/blogs/pini_dayan/archive/2009/03/12/convert-objects-to-json-in-c-using-javascriptserializer.aspx

反序列化: deserialize from json to javascript object

那么你需要做什么: 1)使用通用列表。 2) 根据需要填写清单。 3) 将列表转换为数组 => 使用 linq 非常简单:myList.ToArray() 4) 将数组序列化为 json 字符串。请参阅第一个链接。 5)在您的页面上放置一个隐藏字段并将json字符串设置为其值(后面的代码) 6)每当你需要在js中使用这个数组时,只需反序列化隐藏字段的值并使用即可。请参阅第二个链接。

【讨论】:

  • 感谢您的回复。 :) 我会检查一下并回来:)
  • 嘿..我尝试研究这种方法..你能澄清一下..可能是一些链接.. :) 因为我是网络开发的新手,我有点迷路了。
  • 哇,这很有道理..照你说的做,然后回来:)谢谢一堆:)
  • 我对代码进行了编辑..你能帮我解决最后一点吗...我尝试在线搜索json.org/js.html,但无法获得任何价值:( ..i想随时检索记录 :) 非常感谢
  • 好的,我解决了它并将我的解决方案添加到问题本身:) ..如果有更好的方法请告诉我..非常感谢您的建议和帮助 :) 很多赞赏:)
【解决方案2】:

如果您使用的是 ASP.net MVC,那么您可以执行以下操作。我已经重写了您的代码以使用通用列表而不是 ArrayList,ArrayList 不是强类型的,并且由于泛型随 .net 2.0 一起出现,因此通常被认为已贬值

请注意,以下代码仅适用于 POST 请求,除非您将其修改为包含 JsonRequestBehavior.AllowGet

public class ConfidenceLvl
    {
        public string IpVal { get; set; }
        public string IspVal { get; set; }
        public string ConLvlVal { get; set; }
    }

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            IList<ConfidenceLvl> levels = new List<ConfidenceLvl>();
            levels.Add(new ConfidenceLvl { IpVal = "129.123.123.123", ConLvlVal = "1", IspVal = "AOL" });
            levels.Add(new ConfidenceLvl { IpVal = "129.123.0.0", ConLvlVal = "3", IspVal = "CompuServe" });

            // Controlled json
            return Json(levels.Select(lv => new { title = lv.IspVal, ip = lv.IpVal }));

            // As it comes json
            //return Json(levels);
        }
    }
}

【讨论】:

  • 非常感谢您的回复和时间。我会检查这个方法:)
  • 我正在使用 webforms,这两者之间有区别吗……对不起,如果这是一个愚蠢的问题。但是我是 asp.net 中的 web 开发新手
  • 是的,此方法不适用于网络表单。有关使用网络表单的方法,请参阅建议的链接:stackoverflow.com/questions/227624/…
  • 我对代码进行了编辑..你能帮我解决最后一点吗...我尝试在线搜索stackoverflow.com/questions/4828207/…,但无法获得任何价值:(
猜你喜欢
  • 2013-05-25
  • 2013-02-03
  • 2012-02-10
  • 2020-09-03
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多