assign C# string of array or string[] to javascript array

I have a js code in which an array works well when its like

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

I then made an array string in my code behind or .cs like on class level

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

I then changed js array to this

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

Now I m not having the results as was having with previous js array

Editing with complete code,the jquery I taken from 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();
    }

}

and the script with html is

<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="nofollow noreferrer noopener" 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>

actually its a auto complete functionality to give tags ,the auto complete suggestions for tagging I want to get from C# code ,I took Jquery source from jqueryui.com/demos/autocomplete/#multiple and then I tried to give it C# string from .cs file , I explained it with code on edited version , with C# code behind it works exactly as its in the link

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You need to serialize the C# string array into a javascript array.

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

Usually I create a simple static class as a wrapper.

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

Then you can use that class to serialize the item you need to

//C# Array(Member of asp page)
protected string[] Values = { "Sweet", "Awesome", "Cool" };

<script type="text/javascript">
    var testArray = <%=JavaScript.Serialize(this.Values) %>
</script>

Method 2

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

Method 3

It would be something like this…

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

or

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

The first one would render as

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

and the second one would render as

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

both of which are fine for autocomplete.

Method 4

test property should be a string property and it should render the string which will be parsed by Js engine as an array. Try this.

Code behind property

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

JS

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

Method 5

only use indexes to get your test string array
i have tried by giving indexes like

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


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x