C# asp.net mvc3返回多个json列表
Im asp.net mvc3 c#代码返回如下json列表:C# asp.net mvc3返回多个json列表,c#,jquery,ajax,asp.net-mvc-3,C#,Jquery,Ajax,Asp.net Mvc 3,Im asp.net mvc3 c#代码返回如下json列表: return Json(new { name = UserNames, imageUrl = ImageUrls }); 用户名和图像URL都是列表类型 这是我的javascript function StartSearch(text) { $.ajax({ url: '/Shared/Search', type: 'POST', data: { SearchText: te
return Json(new { name = UserNames, imageUrl = ImageUrls });
用户名
和图像URL
都是列表
类型
这是我的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);
});
}
});
}
如何获取名称和图像URL
谢谢访问名称作为结果的属性,如
result.name[i]
本质上,结果将包含name和imageUrl,它们都是数组,就像您在匿名类型中定义的那样,所以您的代码应该像这样修改,以便为name数组中的每个名称显示一个警报
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
所以
将弹出每个名称
注:
您可能希望更改匿名类型的属性,以反映它们是一个集合:
return Json(new { UserNames = UserNames, ImageUrls = ImageUrls });
这样,当您在success函数中迭代它们时,它将更有意义
正如Alfalfastange指出的,我没有演示如何访问这两个阵列。这让我想到,用户名和图像URL之间的关系是什么
这是用户的图像列表吗?也许你应该考虑的是创建一个具体的模型。例如,UserDisplayModel:
public class UserDisplayModel
{
public string UserName {get;set;}
public string ImageUrl {get;set;}
}
在控制器中,返回UserDisplayModels列表。如果是这样的话,你必须重新思考为什么它们首先是两个独立的列表。也许ImageUrl应该是用户表上的一个字段
现在,当您返回单个列表时,例如
List<UserDisplayModel> users = //get users from db
return Json(new { Users = Users});
这会从每个列表的每个记录中警告
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);
}
});
但作为补充说明,我看到了代码中需要解决的其他问题
POST
,而是根据输入进行搜索。在Ajax调用中将POST
更改为GET
JsonResult
public JsonResult Search(string searchText) {
....
return Json(new { name = UserNames, imageUrl = ImageUrls }, JsonRequestBehavior.AllowGet);
}
你真的需要在每个美元内完成吗?“for”语句不能直接在success中吗?同意更改POST以获取。在
.each
方法中,i
是每个列表对象,因此调用。result
上的每个
仅迭代结果,因此第一个对象是第一个列表,下一个对象是下一个列表。因此,要迭代每个列表中的项目,需要第二个循环。例如,在我的测试中,.each(result,function(i,item)({alert[i];}
给出了每个列表的名称,在我的例子中是FirstList
和SecondList
。在你的例子中,你没有对i或item做任何事情,所以你可以删除$each,然后使用“For”进行迭代,我在result.name-name中传递的第一个响应是一个数组,所以$each(result.name,…alert(item);应该工作是的,您的工作原理是它在名称列表上迭代,但随后它绕过了imageUrl
列表。因此,我想这只是语义问题,您可以调用。在结果上调用每个。名称,然后第二次调用。在结果上调用每个。imageUrl
或者在结果上调用每个lt
然后是每个列表项上的一个内部循环。从技术上讲,这是一个字典列表,它是一个结果列表,因为OP返回两个东西,一个名称列表和一个Url列表。就像我在测试中所说的,。每个
在just result上给出每个返回对象的名称、名称和imageUrls。所以要迭代每个list您在结果中调用。每个结果。名称,然后在结果中调用第二个。imageUrls
。如果您想查看我正在测试的GitHub项目,我可以更新它,这是对优化的预期。该操作进行得很好。
$.each(result, function (i, item) {
for (var x = 0; x < result.FirstList.length; x++) {
alert(result.FirstList[x].Name);
alert(result.SecondList[x].Name);
}
});
return Json(new { FirstList = results, SecondList = otherResults }, JsonRequestBehavior.AllowGet);
public JsonResult Search(string searchText) {
....
return Json(new { name = UserNames, imageUrl = ImageUrls }, JsonRequestBehavior.AllowGet);
}