Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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
访问javascript端POST请求返回的IEnumerable(web API)_Javascript_C#_Ajax_Asp.net Web Api_Ienumerable - Fatal编程技术网

访问javascript端POST请求返回的IEnumerable(web API)

访问javascript端POST请求返回的IEnumerable(web API),javascript,c#,ajax,asp.net-web-api,ienumerable,Javascript,C#,Ajax,Asp.net Web Api,Ienumerable,我知道标题很难理解,但我会尽力解释。我有一个员工数据库,一个连接到脚本的html页面,在我的web api应用程序中有一个控制器。因此,当我单击html页面上的按钮时,相对javascript脚本会在我的控制器上发送post请求。控制器访问数据库并向我的javascript文件返回一个IEnumerable。控制器对数据库执行的查询如下: [HttpPost] public IEnumerable<Employee> Post([FromBody] string name) {

我知道标题很难理解,但我会尽力解释。我有一个员工数据库,一个连接到脚本的html页面,在我的web api应用程序中有一个控制器。因此,当我单击html页面上的按钮时,相对javascript脚本会在我的控制器上发送post请求。控制器访问数据库并向我的javascript文件返回一个IEnumerable。控制器对数据库执行的查询如下:

[HttpPost]
public IEnumerable<Employee> Post([FromBody] string name)
{
    IEnumerable<Employee> query = Enumerable.Empty<Employee>();
    if (!String.IsNullOrEmpty(name))
    {
        query = from e in _db.Employees
        where e.Name.Contains(name)
        select e;
    }
    return query;
}
$.post("api/employees", { '' : insertedText}, function (result) {
    console.log(result[0].Name);
});

因此调用console.log(结果[0].name)应打印返回的第一名员工的姓名,但不打印。您能帮助我理解如何正确访问这些信息吗?

IEnumerable是一个指针,它没有值。如果要返回值,则必须返回列表

试试这个:

   [HttpPost]
    public IEnumerable<Employee> Post([FromBody] string name)
    {
        IEnumerable<Employee> query = Enumerable.Empty<Employee>();
        if (!String.IsNullOrEmpty(name))
        {
            query = from e in _db.Employees
            where e.Name.Contains(name)
            select e;
        }
        return query.ToList();
    }
[HttpPost]
公共IEnumerable Post([FromBody]字符串名称)
{
IEnumerable query=Enumerable.Empty();
如果(!String.IsNullOrEmpty(名称))
{
查询=来自e in _db.Employees
其中e.Name.Contains(Name)
选择e;
}
返回query.ToList();
}

IEnumerable是一个指针,它没有值。如果要返回值,则必须返回列表

试试这个:

   [HttpPost]
    public IEnumerable<Employee> Post([FromBody] string name)
    {
        IEnumerable<Employee> query = Enumerable.Empty<Employee>();
        if (!String.IsNullOrEmpty(name))
        {
            query = from e in _db.Employees
            where e.Name.Contains(name)
            select e;
        }
        return query.ToList();
    }
[HttpPost]
公共IEnumerable Post([FromBody]字符串名称)
{
IEnumerable query=Enumerable.Empty();
如果(!String.IsNullOrEmpty(名称))
{
查询=来自e in _db.Employees
其中e.Name.Contains(Name)
选择e;
}
返回query.ToList();
}

您的员工实体有一个
名称
属性,但在Javascript中,您试图读取一个不存在的
名称
属性。您可以尝试
console.log(result)
查看结果,看看api是否正常

我注意到了几件事,你应该解决它:

  • 因为这是一个简单的员工获取,所以应该使用HTTPGET,而不是post。(api/员工?姓名=约翰)

  • 考虑在查询结束时调用
    .ToList()
    ,因为如果没有它,您将返回一个IQueryable,而这可能不是您想要的,因为您正在将它分配给一个IEnumerable

  • 您可以将代码简化为:

    [HttpGet]
    public IEnumerable<Employee> Get([FromQuery] string name)
    {
       if (!String.IsNullOrEmpty(name))
       {
           //Return null for brevity, but you should consider
           //returning a message saying no users were found matching the criteria.
           return null;
       }
       return _db.Employees.Where(x => x.Name.Contains(name)).ToList();
    }
    
    [HttpGet]
    公共IEnumerable Get([FromQuery]字符串名称)
    {
    如果(!String.IsNullOrEmpty(名称))
    {
    //为简洁起见返回null,但您应该考虑
    //返回一条消息,说明未找到符合条件的用户。
    返回null;
    }
    return _db.Employees.Where(x=>x.Name.Contains(Name)).ToList();
    }
    
    对于将来的重构,它通常被认为是在控制器(例如Employee类)中返回域对象的错误做法。考虑创建一个DTO或ViewModel,然后返回它。

  • 您的员工实体有一个
    名称
    属性,但在Javascript中,您试图读取一个不存在的
    名称
    属性。您可以尝试
    console.log(result)
    查看结果,看看api是否正常

    我注意到了几件事,你应该解决它:

  • 因为这是一个简单的员工获取,所以应该使用HTTPGET,而不是post。(api/员工?姓名=约翰)

  • 考虑在查询结束时调用
    .ToList()
    ,因为如果没有它,您将返回一个IQueryable,而这可能不是您想要的,因为您正在将它分配给一个IEnumerable

  • 您可以将代码简化为:

    [HttpGet]
    public IEnumerable<Employee> Get([FromQuery] string name)
    {
       if (!String.IsNullOrEmpty(name))
       {
           //Return null for brevity, but you should consider
           //returning a message saying no users were found matching the criteria.
           return null;
       }
       return _db.Employees.Where(x => x.Name.Contains(name)).ToList();
    }
    
    [HttpGet]
    公共IEnumerable Get([FromQuery]字符串名称)
    {
    如果(!String.IsNullOrEmpty(名称))
    {
    //为简洁起见返回null,但您应该考虑
    //返回一条消息,说明未找到符合条件的用户。
    返回null;
    }
    return _db.Employees.Where(x=>x.Name.Contains(Name)).ToList();
    }
    
    对于将来的重构,它通常被认为是在控制器(例如Employee类)中返回域对象的错误做法。考虑创建一个DTO或ViewModel,然后返回它。

  • .NET
    如果未使用属性标记属性,则序列化会按原样为属性创建字符串,这会覆盖标准序列化

    因此,您的
    Employee
    类的属性
    Name
    将被序列化为
    Name
    ,而不是
    Name
    ,您正试图在javascript中准确地获取
    Name
    ,而不是
    Name

    尝试按以下方式修改脚本:

    [HttpPost]
    public IEnumerable<Employee> Post([FromBody] string name)
    {
        IEnumerable<Employee> query = Enumerable.Empty<Employee>();
        if (!String.IsNullOrEmpty(name))
        {
            query = from e in _db.Employees
            where e.Name.Contains(name)
            select e;
        }
        return query;
    }
    
    $.post("api/employees", { '' : insertedText}, function (result) {
        console.log(result[0].Name);
    });
    

    .NET
    如果未使用属性标记属性,则序列化会按原样为属性创建字符串,这会覆盖标准序列化

    因此,您的
    Employee
    类的属性
    Name
    将被序列化为
    Name
    ,而不是
    Name
    ,您正试图在javascript中准确地获取
    Name
    ,而不是
    Name

    尝试按以下方式修改脚本:

    [HttpPost]
    public IEnumerable<Employee> Post([FromBody] string name)
    {
        IEnumerable<Employee> query = Enumerable.Empty<Employee>();
        if (!String.IsNullOrEmpty(name))
        {
            query = from e in _db.Employees
            where e.Name.Contains(name)
            select e;
        }
        return query;
    }
    
    $.post("api/employees", { '' : insertedText}, function (result) {
        console.log(result[0].Name);
    });
    

    你能提供API响应吗?谢谢,我猜您有属性
    名称
    ,而不是
    名称
    。您能否提供
    员工
    代码和API响应?您可以尝试以下操作:return query.toList()。因为IEnumerable没有该值,所以它是指针。因为它将使用toList填充。我建议使用alert测试结果[0]返回的内容。name,我怀疑它会说undefined。请检查此链接:,它可能会帮助您理解一些东西,原因可能是您不能简单地将IEnumerable传递回javascript,您必须使用json格式。@MikhailNeofitov您是对的。这是一个愚蠢的错误,因为我缺乏经验!非常感谢,对不起:)您能提供API响应吗?谢谢,我猜您有属性
    名称
    ,而不是
    名称