客户端使用webapi和angularJs引用对象

时间:2015-12-15 11:47:33

标签: javascript c# asp.net angularjs asp.net-web-api

我确信有一种简单的方法可以做到这一点,但我只是不知道它。

我有一个angularJs客户端应用程序(在服务器上使用.net webapi和实体框架),它使用具有父/子关系的对象。这些对象可以在我的angularJs应用程序中创建,并在客户端上具有null的id属性。当我将对象发送到web api时,将填充该id。

例如,我可以将其发送到我的服务器

main: {
    name: 'jim',
    children: [
        { id: null, name: 'dave' },
        { id: null, name: 'bob' }
    ]
}

这适用于父/子关系。在我的服务器上,这将创建如下的c#模型,并使用AutoMapper,我可以设置子项引用其父对象。

public MainModel {
    public string Name { get; set; }
    public ICollection<ChildModel> Children { get; set; }
}

public ChildModel {
    public long Id { get; set; }
    public string Name { get; set; }
}

我的autoMapper文件会说出类似这样的内容

Mapper.CreateMap<Main, MainModel>();
Mapper.CreateMap<MainModel, Main>()
    .AfterMap((s, d) => {
        foreach (var item in d.Children) 
            item.Main = d;
    });
Mapper.CreateMap<Child, ChildModel>().ReverseMap();

但是,如果我引入另一个对象,那不在子集合中,我的代码就会变得混乱,因为多个对象的id = 0。例如

main: {
    name: 'jim',
    children: [
        { id: 0, name: 'dave' },
        { id: 0, name: 'bob' }
    ],
    bestChildId: 0  // which child is this pointing too?
}

正如你所看到的,bestChildId,没有引用子对象,但因为它们的id都是0,所以它不知道哪一个。

最好的方法是什么?是否有一个框架,我应该使用角度来克服这个?或者我必须在客户端上实现引用,并将其全部链接到服务器上。像这样的东西

main: {
    name: 'jim',
    children: [
        { id: 0, name: 'dave' },
        { id: 0, name: 'bob' }
    ],
    bestChildId: 0,  // this could point to an id, and will be downloaded from server upon fetch
    bestChild: {  // use this property on the client, only when id equals 0
        id: 0, name: 'dave'
    }
}

0 个答案:

没有答案