林asp.net MVC3 C#代码返回JSON名单如下:
return Json(new { name = UserNames, imageUrl = ImageUrls });
UserNames
和ImageUrls
均为List<string>
类型
这是我的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);
但作为一个侧面说明,我看到你需要解决的其他问题与您的代码
- 你居然不执行
POST
,您是根据输入的搜索。 更改POST
到GET
在你的Ajax调用 - 改变你的行动回流管道,允许GET,并确保您在返回
JsonResult
。 为C#方法参数命名约定要求帕斯卡 - 套管。 使用第一个字符是小写字母
public JsonResult Search(string searchText) { .... return Json(new { name = UserNames, imageUrl = ImageUrls }, JsonRequestBehavior.AllowGet); }
访问名称为这样的结果的属性result.name[i]
从本质上讲,结果将包含名称和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
迭代的名称数组中的项目,将项目传递到您回电,即项目的第二个参数。
所以
$.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应该对用户表中的字段。
所以,现在,当你返回一个列表,如
List<UserDisplayModel> users = //get users from db
return Json(new { Users = Users});
你可以在JS代码一气呵成迭代它们:
$.each(result.Users, function (i, item) {
alert(item.Name);
alert(item.ImageUrl);
});