【问题标题】:Looping C# list in javascript在javascript中循环C#列表
【发布时间】:2011-08-25 11:46:07
【问题描述】:

我有一个这样的列表:

List<string> list = new List<string>(10);

list.Add("Foo");
list.Add("Bar");
list.Add("Tord");
list.Add("Bob");

如何使用 JavaScript 循环列表?以及如何在 JavaScript 中编写 C# 代码?

【问题讨论】:

  • 这是用于什么平台的?我不确定您是否可以在我熟悉的任何环境中混合搭配这样的语言...
  • 好吧,首先,你到底为什么要在 JavaScript 中编写 C# 代码?这是一个网络应用程序吗?如果您在服务器上使用 C# 而在浏览器中使用 JavaScript,则需要首先将数据从服务器获取到客户端,可能使用 JSON。然后,您将拥有一个 JSON 数组,您可以使用 JavaScript 对其进行循环。事实上,浏览器甚至无法看到该列表。

标签: c# javascript .net list


【解决方案1】:

您可以将列表作为 javascript 列表从您的代码隐藏中注入,或者如果您还想显示列表,您可以做一些简单的事情:

正面

<asp:Label runat="server" ID="showList"></asp:Label>

后面的代码

            List<String> list = new List<string>();
            list.Add("Hello");
            list.Add("How are you doing");
            list.Add("Fine and you?");

            showList.Text += "<ul id='jList'>";
            foreach(String val in list){
                showList.Text += "<li>" + val + "</li>";
            }
            showList.Text += "</ul>";

然后您可以通过 GetElementByNode 从 javascript 中访问“jList”..

【讨论】:

    【解决方案2】:

    很简单,您不能在 javascript 中编写 C# - javascript 是在客户端执行的脚本语言,而 C# 是在服务器上运行的编译代码。

    如果您使用的是 ASP.NET,您可以将 javascript 输出到您的页面,这是一个非常简单的示例:

    void WebForm1_PreRender(object sender, EventArgs e)
    {
        if (!ClientScript.IsClientScriptBlockRegistered("MyScript"))
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("var myArray = new Array();");
            sb.AppendLine("myArray[0] = 'some value';");
            sb.AppendLine("myArray[1] = 'another value';");
            sb.AppendLine("myArray[2] = 'yet another value';");
    
            ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", sb.ToString(), true);
        }
    }
    

    然后您可以在客户端访问和迭代这个 javascript 数组:

    <script language="javascript">
        //first do basic check that the array is available:
        if (typeof(myArray) != 'undefined' && myArray != null) {
            alert(myArray[0]);
        }
    </script>
    

    从这里获取预填充列表并创建 javascript 列表是一个简单的过程:

    void WebForm1_PreRender(object sender, EventArgs e)
    {
        List<string> list = new List<string>(new[] { "Foo", "Bar", "Tord", "Bob" });
    
        if (!ClientScript.IsClientScriptBlockRegistered("MyScript"))
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("var myArray = new Array();");
            for (int i = 0; i < list.Count; i++)
                sb.AppendLine(string.Format("myArray[{0}] = '{1}';", i, list[i]));
    
            ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", sb.ToString(), true);
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用创建 json 数据的方法:

      public static string CreateJsonArray(List<string> list)
      {
          if (list.Count > 0)
          {
              StringBuilder sb = new StringBuilder();
              foreach (string item in list)
              {
                  sb.AppendFormat("'{0}',", item);
              }
              sb.Remove(sb.Length - 1, 1);
              return String.Format("[{0}]", sb.ToString());
          }
          return "[]";            
      }
      

      然后将其分配给 javascript 脚本标签

      // C#
      List<string> list = new List<string>(10);
      
      list.Add("Foo");
      list.Add("Bar");
      list.Add("Tord");
      list.Add("Bob");
      
      ltrResult.Text = CreateJsonArray(list);
      
      // HTML
      <script type="text/javascript">
          var arr = <asp:Literal id="ltrResult" runat="server" />;
      </script>
      

      【讨论】:

        【解决方案4】:

        @tord:至少现在,你不能在你的 javascript 文件中使用 C# 代码。您很可能需要将 List 转换为您的 javascript 可以理解的 json 等价物。您可以使用 C# 中的 Response.Write 将 json 发送到客户端

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-03
          • 1970-01-01
          • 2021-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多