asp.net mvc3返回多个json列表

我在asp.net mvc3 c#代码返回json列表,如下所示:

return Json(new { name = UserNames, imageUrl = ImageUrls }); 

UserNamesImageUrls都是List类型

这是我的JavaScript

 function StartSearch(text) { $.ajax({ url: '/Shared/Search', type: 'POST', data: { SearchText: text }, dataType: 'json', success: function (result) { $.each(result, function (i, item) { alert(result[i].name); }); } }); } 

我怎么能得到名字和ImageUrls

谢谢

这会从每个列表的每条记录中提醒Name的值。

 $.each(result, function (i, item) { for (var x = 0; x < result.FirstList.length; x++) { alert(result.FirstList[x].Name); alert(result.SecondList[x].Name); } }); 

如果正确形成,则假定您的Json响应。 像这样:

 return Json(new { FirstList = results, SecondList = otherResults }, JsonRequestBehavior.AllowGet); 

但作为旁注,我发现您需要解决的代码存在其他问题

  1. 您实际上没有执行POST ,而是根据输入进行搜索。 在Ajax调用中将POST更改为GET
  2. 更改您的操作返回行以允许获取并确保您返回JsonResult
  3. C#方法参数的命名约定调用Pascal-casing。 首字母使用小写字母

     public JsonResult Search(string searchText) { .... return Json(new { name = UserNames, imageUrl = ImageUrls }, JsonRequestBehavior.AllowGet); } 

访问名称作为结果的属性,如result.name[i]

本质上,结果将包含name和imageUrl,它们都是数组,就像你在匿名类型中定义的那样,所以你的代码应该像这样修改,以显示名称数组中每个名称的警报

 function StartSearch(text) { $.ajax({ url: '/Shared/Search', type: 'POST', data: { SearchText: text }, dataType: 'json', success: function (result) { $.each(result.name, function (i, item) { alert(item); }); } }); } 

$each遍历名称数组中的项目时,它会将项目传递给回调的第二个参数,即item。

所以

 $.each(result.name, function (i, item) { alert(item); }); 

将弹出每个名称。

笔记:

您可能希望更改匿名类型的属性以反映它们是一个集合:

 return Json(new { UserNames = UserNames, ImageUrls = ImageUrls }); 

这样,当你在成功函数中迭代它们时,它会更有意义。

正如AlfalfaStrange指出的那样,我没有演示如何访问这两个数组。 这让我想到,用户名和图片url之间的关系是什么?

这是用户的图像列表吗? 也许您应该考虑为此创建一个特定的模型。 例如,UserDisplayModel:

 public class UserDisplayModel { public string UserName {get;set;} public string ImageUrl {get;set;} } 

在您的控制器中返回UserDisplayModels列表。 如果是这种情况,您必须首先重新考虑它们为什么是两个单独的列表。 也许ImageUrl应该是User表上的一个字段。

所以现在,当你返回一个列表时,例如

 List users = //get users from db return Json(new { Users = Users}); 

你可以在js代码中一次性迭代它们:

  $.each(result.Users, function (i, item) { alert(item.Name); alert(item.ImageUrl); });