2013-07-10 102 views
5

我的问题是如何(如果可能)从string[] a;我通过 视图通过ViewBag如何获得一个JavaScript数组的字符串。在控制器的ASP NET MVC阵列到客户端阵列

我想使用这个,因为我从数据库中获取一组数据,并且我想在 视图中制作图表,并且我需要一个JavaScript数组。

回答

8

是很容易的 “渲染” 的数组为JavaScript对象,使用string.Join或类似:

@{ 
    ViewBag.a = new int[] { 1, 2, 3 }; 
    ViewBag.b = new string[] { "a", "b", }; 
} 

<script type='text/javascript'> 
    // number array 
    var a = [ @(string.Join(", ", (int[])ViewBag.a)) ]; 
    console.log(a); // [1, 2, 3] 

    // string array -- use Html.Raw 
    var b = [@Html.Raw("'" + string.Join("', '", (string[])ViewBag.b) + "'")]; 
    console.log(b); 
</script> 
+0

太好了。还有一个问题。如果我有一个原始数组的字符串,并希望有一个js数组的字符串? – coredump

+0

为什么不'Json.Encode'? – haim770

+0

@coredump看到我的更新 - 你必须使用'Html.Raw',否则引号将得到HTML编码。 – McGarnagle

0

控制器

public ActionResult Index() 
    { 
     int[] myArray = new int[] { 1, 3, 5, 7, 9 }; 
     ViewBag.myArray = myArray; 
     return View(); 
    } 

查看

@{ 
    ViewBag.Title = "Index"; 
    var myArray = (int[])ViewBag.myArray; 
    var myjsstring = ""; 
    for(int i =0;i<myArray.Length;i++) 
    { 
     myjsstring += "mycars[" + i.ToString() + "] = " + myArray[i] + ";"; 
    } 
} 

    <script type="text/javascript"> 
     var mycars = new Array(); 
     @myjsstring 


    </script> 
1

也许:

@{ 
    ViewBag.foo = new string[] { "a", "b", "c" }; 
} 

var newFoo = @Html.Raw(Json.Encode(@ViewBag.foo));