2014-05-21 58 views
0

我有这样一个控制器的动作:纠正JSON结果对象

List<string> abcd = new List<string>() 
foreach (var i in images) 
{ 
    abcd.Add("{url:'"+GetImageUrl(i)+"'}"); 
}  
return Json(abcd, JsonRequestBehavior.AllowGet); 

这样的abcd输出

["{url:'/PropertyImage/GetPropertyImage?imageId=1'}", "{url:'/PropertyImage/GetPropertyImage?imageId=2'}", "{url:'/PropertyImage/GetPropertyImage?imageId=8'}"] 

但结果我想要的是:

images:[{url:'/PropertyImage/GetPropertyImage?imageId=1'}, {url:'/PropertyImage/GetPropertyImage?imageId=2'}, {url:'/PropertyImage/GetPropertyImage?imageId=8'}] 

在我的JavaScript,我有

$.ajax({ 
    type: "GET", 
    url: url, 
    success: function (result) { 
     console.log(JSON.stringify(result)); 
     var data = { 
      images: [result] 
     }; 

     template = "{{#images}}<a href='{{url}}'><img class='imageborder' src='{{url}}' style='width:150px;height:150px'></img></a>{{/images}}"; 
     renderedOutput= Mustache.to_html(template,data); 
     $('#Propertyimagelinks').html(renderedOutput); 
    } 
}); 

如何获得正确的输出?

回答

2

而不是试图手动操纵JSON字符串,它似乎简单了很多使用ASP.NET MVC的内置JSON序列化的功能和LINQ的一点点,像这样:

var abcd = images.Select(i => new { url = GetImageUrl(i) }).ToList(); 
return Json(abcd, JsonRequestBehavior.AllowGet); 

而在你的JavaScript结果处理,使用:

var data = { images: result }; 

或者,你可以在你的控制器使用

var abcd = images.Select(i => new { url = GetImageUrl(i) }).ToList(); 
return Json(new { images = abcd }, JsonRequestBehavior.AllowGet); 

而且在你的JavaScript:

var data = result;