[asp.net]在代码背后的 ASPX,在 foreach 循环中的 javascript 代码中调用列表吗?

发布时间: 2017/3/26 4:37:14
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有以下 aspx.cs:

public partial class BarChart 
{
    public class LabelsDetail
    {
        public string LabelId { get;set; }
        public string LabelDesc { get; set; }
    }
    public List<LabelsDetail> LabelsDetails { get; set; }

    public void InsertDataToLabelsDetails()
    {
        // Data comes from somewhere into "LabelsDetails"

    }

}

并在 ASPX 页下面的 JS 代码︰

        function setupBarChart(JQObjectContainer, JsonData) {
            var hashTableSize = <%=this.LabelsDetails.Count%>;
            var hashtable = {};

            if (hashTableSize != 'undefined' && hashTableSize > 0)
            {
                for (var item in <%=this.LabelsDetails%>)
                { 
                    hashtable[item.LabelId] = item.LabelDesc;
                }
            }

}

我怎么能在服务器端列表中的客户端上的 foreach?

那一刻我得到 Uncaught SyntaxError: Unterminated template literal 当我试着在服务器侧列表循环 ( this.LabelsDetails )。

谢谢你

解决方法 1:

必须将您的集合转换为一个符号,表示 JavaScript 会明白,要做,你可以使用 JavaScriptSerializer 或任何其他 JSON 转换器︰

var collection = new[]{
    new { Name = "a" },
    new { Name = "b" },
    new { Name = "c" },
    new { Name = "d" }
};

System.Web.Script.Serialization.JavaScriptSerializer s = new System.Web.Script.Serialization.JavaScriptSerializer();

Console.WriteLine(s.Serialize(collection));

这将输出 [{"Name":"a"},{"Name":"b"},{"Name":"c"},{"Name":"d"}] 中是 JavaScript 有效的数组表示法。你也可以提高你在 JS 循环的方式︰

var array = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(this.LabelsDetails)%>;
for(var x=0;x<array.length;x++)
{ 
    hashtable[array[x].LabelId] = array[x].LabelDesc;
}

为......在不是好来循环中 JS 的数组,它是不一样 foreach 在 C# 中。

MDN:

数组迭代和干...在

注意︰ 对于...在应该不用于遍历一个数组索引顺序很重要。数组索引是与整数名称只可枚举属性,否则相同对象的常规属性。那里是不能保证该干...中将返回在任何特定的顺序索引,它将返回所有可枚举的属性,包括那些与非 — — 整数的名字和继承的那些。

然而,它可能是值得检讨你的做法,并使用其他技术来做客户端和服务器端之间的连接。

官方微信
官方QQ群
31647020