Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net mvc3返回多个json列表_C#_Jquery_Ajax_Asp.net Mvc 3 - Fatal编程技术网

C# asp.net mvc3返回多个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

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: 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
  • 更改操作返回行以允许get,并确保返回的是
    JsonResult
  • C#方法参数的命名约定调用Pascal大小写。第一个字符使用小写字母

    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);
    }