I need to pass a variable from C# to javascript in the form { 'key':'value', ..., }. I tried passing it as a string and hoping javascript would parse it (because the C# on cshtml pages is evaluated server side and js is client side) but unfortunately the quotes were formatted as &whateverthecodeis; so it didn't work. I think JSON might be what I'm looking for, but I have no idea how to use it.
            Asked
            
        
        
            Active
            
        
            Viewed 2,619 times
        
    1
            
            
        - 
                    You could still use JSON, you would have to remove the format of the string brought back. Dig a little deeper in here and you'll see how you can accomplish this. – Jose Aug 16 '13 at 19:02
 - 
                    Have you tried google'ing "c# json key value?" Here is one of the results that's pretty straightforward. Let me know if you have any questions http://stackoverflow.com/questions/4861138/c-sharp-json-serialization-of-dictionary-into-keyvalue-instead-of-keyk – user1477388 Aug 16 '13 at 19:04
 - 
                    If your application is an ASP.Net page then you can use RegisterClientScript/RegisterStartupScript to write your javascript to the page. It will be written to the page as it is without getting encoded. – Himanshu Kumar Aug 16 '13 at 19:11
 - 
                    @user1477388 Thanks very much! I had tried Googling, but not quite the right thing, apparently. I now have a JsonResult. Is there a way to pass this to my javascript without querying a page that returns the JsonResult? `@ViewData["CustomersSearch"]` is rendered as `System.Web.Mvc.JsonResult` – davidjosepha Aug 16 '13 at 19:26
 - 
                    @user1579458 if you want to pass data from c# to a javascript, you're talking about AJAX. You can accomplish this easiest via jQuery as shown here http://api.jquery.com/jQuery.ajax/ Here's a practical example for MVC http://stackoverflow.com/questions/16186083/making-a-simple-ajax-call-to-controller-in-asp-net-mvc – user1477388 Aug 16 '13 at 19:31
 
2 Answers
3
            
            
        Here is what I might do...
Run this console app and see what it does:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// note: you will have to include a reference to "System.Web.Extensions" in your project to be able to use this...
using System.Web.Script.Serialization;
namespace KeyValuePairTestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            List<KeyValuePair<string, string>> pairs = new List<KeyValuePair<string, string>>()
            {
                new KeyValuePair<string, string>("MyFirstKey", "MyFirstValue"),
                new KeyValuePair<string, string>("MySecondKey", "MySecondValue")
            };
            string json = new JavaScriptSerializer().Serialize(pairs);
            Console.WriteLine(json);
        }
    }
}
For the "pass to javascript" part, please see here Making a Simple Ajax call to controller in asp.net mvc for practical examples for MVC and jQuery.
        Community
        
- 1
 - 1
 
        user1477388
        
- 20,790
 - 32
 - 144
 - 264
 
1
            
            
        Yes you can use JSON. Perhaps you should try using escape characters to escape the quotes being misinterpreted. Or as in the above answer @user1477388, serialize the keyvalupairs to Json and return as following:
  public ActionResult ReturnJsonObject()
 {
    //Your code goes here
    return Json(json);
}
        sandeepani
        
- 353
 - 3
 - 12