【问题标题】:assign C# string of array or string[] to javascript array将数组或字符串 [] 的 C# 字符串分配给 javascript 数组
【发布时间】:2012-02-19 21:24:25
【问题描述】:

我有一个 js 代码,其中一个数组在它喜欢时可以很好地工作

var availableTags = [
            "ActionScript",
            "AppleScript",
            "Asp",
            "BASIC",
            "C"
                     ];

然后我在后面的代码中创建了一个数组字符串,或者像类级别的 .cs

 public static string[] test={"animal","lovely"};

然后我把js数组改成了这个

 var availableTags =  "<%=test%>"; // also tried without quotes 

现在我没有像以前的 js 数组那样得到结果

完整代码编辑,我取自http://jqueryui.com/demos/autocomplete/#multiple的jquery

  using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Collections;
using System.Web.Script.Serialization;

public partial class onecol : System.Web.UI.Page
{
   JavaScriptSerializer serializer;

   public static string test = "['animal','lovely']";
    public static string check;


    protected void Page_Load(object sender, EventArgs e)
    {
       serializer = new JavaScriptSerializer();
        //serializer
        this.detail.ToolsFile = "BasicTools.xml";
        test = returnTitle();
    }

}

而带有html的脚本是

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<script type="text/javascript" src="Jscript.js"></script>  
     <script type="text/javascript" src="jquery-1.7.1.min.js"></script> 
     <script type="text/javascript" src="jquery-ui-1.8.17.custom.css"></script>  
     <link href="~/jquery-ui-1.8.17.custom.css" rel="stylesheet" type="text/css"/>
      <script type="text/javascript">
          $(function () {
                var availableTags =  <%=test%>;

              function split(val) {
                  return val.split(/,\s*/);
              }
              function extractLast(term) {
                  return split(term).pop();
              }

              $("#tags")
              // don't navigate away from the field on tab when selecting an item
            .bind("keydown", function (event) {
                if (event.keyCode === $.ui.keyCode.TAB &&
                        $(this).data("autocomplete").menu.active) {
                    event.preventDefault();
                }
            })
            .autocomplete({
                minLength: 0,
                source: function (request, response) {
                    // delegate back to autocomplete, but extract the last term
                    response($.ui.autocomplete.filter(
                        availableTags, extractLast(request.term)));
                },
                focus: function () {
                    // prevent value inserted on focus
                    return false;
                },
                select: function (event, ui) {
                    var terms = split(this.value);
                    // remove the current input
                    terms.pop();
                    // add the selected item
                    terms.push(ui.item.value);
                    // add placeholder to get the comma-and-space at the end
                    terms.push("");
                    this.value = terms.join(", ");
                    return false;
                }
            });
          });
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<div class="demo" >
<div class="ui-widget">
    <label for="tags">Tag programming languages: </label>
    <input id="Text1" class="#tags" size="50" />


</div>
</div>

实际上它是一个自动完成功能来提供标签,我想从 C# 代码中获得标签的自动完成建议,我从 jqueryui.com/demos/autocomplete/#multiple 获取了 Jquery 源代码,然后我尝试给它 C#来自 .cs 文件的字符串,我用编辑版本的代码对其进行了解释,其背后的 C# 代码与链接中的代码完全相同

【问题讨论】:

标签: c# javascript jquery asp.net jquery-ui


【解决方案1】:

仅使用索引来获取您的测试字符串数组 我试过给出像

这样的索引
var availableTags =  "<%=test[0]%>";  // animal 
var availableTags =  "<%=test[1]%>";  // lovely 

【讨论】:

    【解决方案2】:

    应该是这样的……

    var availableTags =  ["<%= string.Join("\", \"", test) %>"];
    

    var availableTags =  ['<%= string.Join("', '", test) %>'];
    

    第一个将呈现为

    var availableTags = ["Sweet", "Awesome", "Cool"];
    

    第二个将呈现为

    var availableTags = ['Sweet', 'Awesome', 'Cool']; 
    

    这两个都适合自动完成。

    【讨论】:

    • 我试过带/不带引号/[] 和 ' ' ,但还是不行
    • @user1074474,“不工作”是什么意思?向我们展示错误或呈现的 HTML(查看源代码)。
    • @user1074474,我们不必查看完整的源代码。如果您正在获取渲染 HTML 的相关部分,我们需要看到的只是错误。
    • 实际上它是一个自动完成功能来提供标签,我想从 C# 代码中获取标签的自动完成建议,我从 jqueryui.com/demos/autocomplete/#multiple 获取 Jquery 源代码,然后我尝试给它 C# 字符串.cs 文件,我用编辑版本上的代码对其进行了解释,其背后的 C# 代码与链接中的代码完全相同
    • 在浏览器中查看源代码并搜索 var availableTags = ;
    【解决方案3】:

    您需要将 C# 字符串数组序列化为 javascript 数组。

    http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

    通常我创建一个简单的静态类作为包装器。

    public static class JavaScript
    {
        public static string Serialize(object o)
        {            
            JavaScriptSerializer js = new JavaScriptSerializer();
            return js.Serialize(o);
        }
    }
    

    然后你可以使用那个类来序列化你需要的项目

    //C# Array(Member of asp page)
    protected string[] Values = { "Sweet", "Awesome", "Cool" };
    
    <script type="text/javascript">
        var testArray = <%=JavaScript.Serialize(this.Values) %>
    </script>
    

    【讨论】:

      【解决方案4】:

      test 属性应该是一个字符串属性,它应该将 Js 引擎解析为数组的字符串呈现出来。试试这个。

      属性背后的代码

      public static string test= "['animal','usman lovely']";
      

      JS

       var availableTags =  <%=test%>;//No quotes
      

      【讨论】:

      • 应该去掉花括号并将其定义为string
      • 当页面被渲染时,你在源码中看到了什么?
      • 你是对的,我得到了 var availableTags = "['animal','usman lovely']";在源代码中,所以我是否需要将它作为“[”animal”,”usman lovely“]”,因为原始源代码已按原样编写,这在 C# 中怎么可能?我需要我的 C# 代码来提供 C# 代码字符串喜欢这里 jqueryui.com/demos/autocomplete/#multiple ,请告诉我一个方法
      • 删除text 周围的双引号,即var availableTags = &lt;%=test%&gt;。然后您可以将该变量用作 JavaScript 中的数组
      【解决方案5】:
      var availableTags =  ['<%=String.join("','",test)%>'];
      

      【讨论】:

      • 应该注意,如果您的任何字符串包含单引号,这些应该被转义。
      • 编译器错误消息:CS0117:“字符串”不包含“加入”的定义
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 2019-10-13
      相关资源
      最近更新 更多