2012-01-26 423 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