【问题标题】:How to build a nested tree with ASP.NET Web API如何使用 ASP.NET Web API 构建嵌套树
【发布时间】:2016-12-22 15:29:43
【问题描述】:

我在后端使用 ASP.NET Web API 2,在前端使用 AngularJS。我想在 AngularJS 中显示一个树视图。

所以我的 ASP Web API 中需要一个嵌套模型。该模型目前如下所示:

public class Register
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<Register> Children { get; set; }
}

和这样的控制器:

    // GET: api/Registers
    public IQueryable<Register> GetRegister()
    {
        return db.Register;
    }

在我的数据库中,我添加了以下示例:

JSON 输出显示:

[{"ID":4,"Name":"RootFolder","Children":[{"ID":5,"Name":"Sub1","Children":null}]},{"ID":5,"Name":"Sub1","Children":null}]

第一个条目看起来不错,但我不想输出孩子本身。是否可以只输出带有ChildrenRootFolder 而不是孩子本身?像这样:

{"ID":4,"Name":"RootFolder","Children":[{"ID":5,"Name":"Sub1","Children":null}]}

第二个问题是,当我想输入一个特定的文件夹 ID(例如ID 4(RootFolder))时。我只得到这个作为回应:

为什么没有子元素?控制器是这个:

     // GET: api/Registers/5
    [ResponseType(typeof(Register))]
    public IHttpActionResult GetRegister(int id)
    {
        Register register = db.Register.Find(id);
        if (register == null)
        {
            return NotFound();
        }

        return Ok(register);
    }

总结:

  • 如何过滤输出以仅显示每个子对象的 RootFolders 而不显示子对象本身?
  • 为什么在我指定特定 ID 时没有子代?

【问题讨论】:

    标签: c# asp.net json rest asp.net-web-api


    【解决方案1】:

    我猜你正在使用实体框架进行数据库操作。 对于第一点,您需要过滤根文件夹行,例如对于根 Register_ID 为空

    db.Register.Where(x => x.Register_ID == null && x.ID==ID).ToList()
    

    对于加载根文件夹的子文件夹的第二点,您可以包含它的导航属性,例如参考下面的代码。

    db.Register.Include(x => x.Children).Where(x => x.Register_ID == null).ToList();
    

    【讨论】:

    • 非常感谢。我只是有一些问题需要解决。今天我没有得到任何子元素(我没有从昨天更改我的代码)。奇怪的是:当注册 ID 4 是 5 的孩子时,它不起作用。当我的 ID 5 是 4 的孩子时,它工作正常。所以只有当 ID 大于 Register_ID 时,child 才有效。昨天这不是问题。当我解决这个问题时,我会尝试你的建议,但它看起来非常好。谢谢!
    • 现在可以正常工作了。但我不能使用(x => x.Register_ID == null)。模型未知 Register_ID。我不知道为什么 EF 在数据库中将我的“儿童”对象重命名为“Register_ID”。当我使用 x.Children 而不是 Register_ID 时,我得到一个异常,即对象和列表无法与 null 进行比较。
    • 如何在 dapper 中做到这一点。我有相同的结构和模型。
    猜你喜欢
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多