JavaScript array from ViewData list - Razor

952 Views Asked by At

I used the following in my MVC3 (aspx) to generate an array from ViewData that contains a list:

<script runat="server">
      void RenderJavascriptHashArray (string listName, string hashName)
            {
            IEnumerable<KeyValuePair<int, string>> pairs = this.ViewData[listName] as IEnumerable<KeyValuePair<int, string>>;

            Response.Write("var " + hashName + " = new Array();\n");
            foreach (KeyValuePair<int, string> pair in pairs)
                {
                Response.Write(hashName + "[" + pair.Key.ToString() + "] = \"" + pair.Value + "\";\n");
                }
            }
</script>

<script>
   <% this.RenderJavascriptHashArray("InfoURLs", "InfoURLs"); %>
</script>

In MVC5 Razor, the array is displayed on the screen because of Response.Write, is there an alternative approach! Would appreciate your suggestions.

1

There are 1 best solutions below

1
On

Try this i do not think you need response if you are in razor.

@Html.Raw(RenderJavascriptHashArray("InfoURLs", "InfoURLs"))
@{
            string RenderJavascriptHashArray (string listName, string hashName)
            {

              IEnumerable<KeyValuePair<int, string>> pairs = this.ViewData[listName] as IEnumerable<KeyValuePair<int, string>>;
                  System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
                  sb.Append("var " + hashName + " = new Array();\n");
               foreach (KeyValuePair<int, string> pair in pairs)
                {
                sb.Append(hashName + "[" + pair.Key.ToString() + "] = \"" + pair.Value + "\";\n");
                }
                return sb.ToString();
            }
}