将列表传递给mvc中的javascript

时间:2013-06-07 05:00:54

标签: asp.net-mvc json list

我有一个我想要显示的图片网址列表。我将列表从控制器传递给视图。我知道列表正在成功创建。但是当它进入视图时,javascript将其解释为“*System.Collections.Generic.List 1 [System.String] *`”而不是实际列表。这会导致图像无法显示。

以下是我用于将列表分配给js变量的代码行:

var imageUrls = '@Model.PicUrls';

和控制器

public ActionResult Index()
    {
        var pics = _ctx.Image.Select(m => m).Take(10).ToList<ImageModel>();

        var picUrls = new List<string>();

        for (int i = 0; i <= pics.Count - 1; i++)
        {
            picUrls.Add(pics[i].ImageUrl);

        }

        var outModel = new ViewPostViewModel
        {
            PicUrls = picUrls
        };

        return View(outModel);

我试图返回一个Json对象,但之后只显示的页面是已完成的列表。

return Json(outModel.PicUrls, JsonRequestBehavior.AllowGet);

所以,Json的建议有些作用,但它并不完全存在

2 个答案:

答案 0 :(得分:0)

获得

System.Collections.Generic.List`1 [System.String]

因为你是模型值PicUrls默认的ToString()实现是返回它的类型。

您可以将PicUrls存储为JSON字符串,然后解析为js中的javascript数组。

公共ActionResult索引()     {         var pics = _ctx.Image.Select(m =&gt; m).Take(10)。ToList();

    var picUrls = String.Empty;

    for (int i = 0; i <= pics.Count - 1; i++)
    {
        picUrls += (picUrls != String.Empty ? ", " : "") + @"""" + pics[i].ImageUrl + @"""";
    }

    var outModel = new ViewPostViewModel
    {
        PicUrls = @"[" + picUrls + "]";
    };

    return View(outModel);

在你的js中,使用

var imageUrls = JSON.parse('@Model.PicUrls');

答案 1 :(得分:0)

试试吧

  public ActionResult Index()
    {
        var pics = _ctx.Image.Select(m => m.ImageUrl)
        .Take(10).ToList();

        var picUrls = new List();

        for (int i = 0; i <= pics.Count - 1; i++)
        {
            picUrls.Add(pics[i]);

        }

        var outModel = new ViewPostViewModel
        {
            PicUrls = picUrls
        };
return Json(outModel.PicUrls, JsonRequestBehavior.AllowGet);
}