You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从C# API向Angular 9返回实体ID?现有实现问题求助

问题分析与解决方案

咱们先拆解下现有代码的问题,再一步步解决获取新用户ID的需求:

现有实现的核心问题

  1. 前端未接收后端返回值:你的subscribe()回调是空的,完全没去捕获后端CreateOrEdit函数返回的数值——新建时返回的是用户ID,编辑时返回的是-1。
  2. finalize赋值逻辑错误:你在finalize里把this.users.id赋值给userId,但新建用户时前端的this.users.id本来就是null(因为后端Create分支就是在input.Id为null时触发的),所以这里赋值的是空值,弹窗自然显示为空。

修复方案(前端代码调整)

后端的逻辑是没问题的,只需要修改前端的save()方法,正确接收并处理后端返回的ID即可:

userId: any; 
save(): void { 
    this.saving = true; 
    this._userServiceProxy.createOrEdit(this.users) 
        .pipe(finalize(() => { 
            this.saving = false; 
        })) 
        .subscribe((returnedId: number) => { 
            // 区分新建和编辑操作
            if (returnedId !== -1) {
                this.userId = returnedId;
                this.users.id = returnedId; // 同步更新前端用户对象的ID
            }
            this.notify.info(this.l('SavedSuccessfully')); 
            this.close(); 
            this.modalSave.emit(null); 
            alert(this.userId); // 现在这里就能拿到正确的新ID了
        }, (error) => {
            // 可选:添加错误处理逻辑
            this.notify.error(this.l('SaveFailed'));
        }); 
}

关键修改点说明

  • 接收返回值:在subscribe的成功回调里添加returnedId: number参数,这个参数就是后端CreateOrEdit方法返回的数值。
  • 区分操作类型:通过判断returnedId是否为-1,确定当前是新建操作(此时returnedId就是新用户的ID)还是编辑操作。
  • 修正赋值时机:把userId的赋值从finalize移到subscribe的成功回调中,因为只有在成功拿到后端返回的ID后,这个值才是有效的。

这样调整后,新建用户时就能立即获取到后端返回的新ID,弹窗也能正确显示结果了。

内容的提问来源于stack exchange,提问作者avdeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:07:56