asp.net mvc3返回多个json列表

Ira*_*ili 4 c# ajax jquery asp.net-mvc-3

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

return Json(new { name = UserNames, imageUrl = ImageUrls });
Run Code Online (Sandbox Code Playgroud)

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);
            });
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我怎么能得到名字和ImageUrls

谢谢

jfl*_*net 5

访问名称作为此结果的属性 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);
           });
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

$each迭代名称数组中的项目时,它会将项目传递给回调的第二个参数,即项目.

所以

$.each(result.name, function (i, item) {
    alert(item);
});
Run Code Online (Sandbox Code Playgroud)

将弹出每个名称.

笔记:

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

return Json(new { UserNames = UserNames, ImageUrls = ImageUrls });
Run Code Online (Sandbox Code Playgroud)

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

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

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

public class UserDisplayModel
{
    public string UserName {get;set;}
    public string ImageUrl {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

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

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

List<UserDisplayModel> users = //get users from db
return Json(new { Users = Users});
Run Code Online (Sandbox Code Playgroud)

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

       $.each(result.Users, function (i, item) {
            alert(item.Name);
            alert(item.ImageUrl);
        });
Run Code Online (Sandbox Code Playgroud)