2012-01-26 178 views
5

我有一个JS代码,其中一个阵列工作良好时,其像分配C#字符串的JavaScript阵列

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

我然后在我的代码由阵列字符串后面或的.cs等上类级别

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

我然后改变JS数组写入此

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

现在我米不具有结果WA S采用以往JS数组

编辑与完整的代码,我从http://jqueryui.com/demos/autocomplete/#multiple

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(); 
    } 

} 

采取的jQuery和与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源代码,然后尝试从.cs文件中为它提供C#字符串,用编辑版本的代码对其进行编辑,其后面的C#代码与其链接中的代码完全相同

+2

[将C#ASP.NET数组传递给Javascript数组](http://stackoverflow.com/questions/3464498/pass-c-sha rp-asp-net-array-to-javascript-array) –

+0

@TimSchmelter编辑,请检查 – user1074474

回答

21

您需要将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> 
+1

+1序列化 –

+0

那么下一步呢? – user1074474

+0

我要用完整的源代码编辑问题 – user1074474

1

test属性应该是一个字符串属性,它应该呈现将由Js引擎分析的字符串作为数组。尝试这个。

背后属性代码

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

JS

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

我没有试过引号 – user1074474

+0

@ user1074474 - 检查属性更改背后的代码。 – ShankarSangoli

+0

应该放下大括号并将其定义为'string'。 –

3

这将是这样的......

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

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

第一个将呈现为

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

和第二人会呈现为

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

这两者都很好,自动完成功能。

+0

我用/不带引号/ []和''来尝试它,但仍然不起作用 – user1074474

+0

@ user1074474,你是什么意思“不工作”?向我们显示错误或呈现的HTML(查看源代码)。 –

+0

我要使用完整的源代码编辑问题 – user1074474

6
var availableTags = ['<%=String.join("','",test)%>']; 
+0

应该指出的是,如果你的任何字符串包含单引号,这些应该被转义。 –

+0

编译器错误消息:CS0117:'字符串'未包含编辑的'join' – user1074474

+0

的定义,请检查 – user1074474

0

仅使用索引来得到你的测试字符串数组 我已经给指标试图像

var availableTags = "<%=test[0]%>"; // animal 
var availableTags = "<%=test[1]%>"; // lovely