如何从C# API向Angular 9返回实体ID?现有实现问题求助
问题分析与解决方案
咱们先拆解下现有代码的问题,再一步步解决获取新用户ID的需求:
现有实现的核心问题
- 前端未接收后端返回值:你的
subscribe()回调是空的,完全没去捕获后端CreateOrEdit函数返回的数值——新建时返回的是用户ID,编辑时返回的是-1。 - 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
相关产品推荐
相关产品推荐

