Blazor Telerik开发CRUD应用时编辑数据无法保存报错如何解决
错误根因
你遇到的Value cannot be null. (Parameter 'source')报错指向Enumerable.First方法的入参source为null,结合你的代码有两个核心问题:
- 你绑定给TelerikGrid的数据源
uzytkownicy列表在执行更新逻辑时未初始化,或者接口请求失败后被置为null,调用uzytkownicy.First()时触发空引用异常 - 你的编辑逻辑标记完全写反了:
DodajU方法(新增用户)里你把Record设为true,但更新逻辑却写在if(Record)的分支里,新增的时候根本没有对应的Id去匹配列表里的对象,编辑模式下反而不会进入更新逻辑
修复步骤
第一步:修正逻辑判断标记
把EdytujRekord(编辑)方法里的Record赋值改为true,DodajU(新增)方法里的Record改为false,或者直接重命名变量避免歧义,比如用isNewRecord:
// 新增方法 public void DodajU() { isNewRecord = true; // 标记为新增 uzytkownik = new Uzytkowniccy(); uzytkownik.Imie = uzytkownik.Nazwisko = uzytkownik.Email = uzytkownik.Login = uzytkownik.Password = uzytkownik.PPassword = String.Empty; isVisible = true; } // 编辑方法 public void EdytujRekord(GridCommandEventArgs args) { isNewRecord = false; // 标记为编辑 uzytkownik = (args.Item as Uzytkowniccy); isVisible = true; }
第二步:修复提交逻辑,新增空判断
提交方法里先判断uzytkownicy是否为null,同时补充新增分支的逻辑:
async Task OnValidSubmit(object obj) { if (obj == null || uzytkownik == null) { isVisible = false; return; } // 编辑逻辑 if (!isNewRecord) { // 先判空数据源,用FirstOrDefault避免匹配不到的异常 if (uzytkownicy == null) return; var ToUpdate = uzytkownicy.FirstOrDefault(p => p.Id == uzytkownik.Id); if (ToUpdate == null) return; ToUpdate.Imie = uzytkownik.Imie; ToUpdate.Nazwisko = uzytkownik.Nazwisko; ToUpdate.Email = uzytkownik.Email; ToUpdate.Login = uzytkownik.Login; ToUpdate.Password = uzytkownik.Password; ToUpdate.PPassword = uzytkownik.PPassword; ToUpdate.TypUzytkownika = uzytkownik.TypUzytkownika; await Http.PutAsJsonAsync<Uzytkowniccy>($"api/uzytkownicy/{uzytkownik.Id}", uzytkownik); } // 补充你缺失的新增逻辑 else { var response = await Http.PostAsJsonAsync<Uzytkowniccy>("api/uzytkownicy", uzytkownik); if (response.IsSuccessStatusCode) { var createdUser = await response.Content.ReadFromJsonAsync<Uzytkowniccy>(); uzytkownicy ??= new List<Uzytkowniccy>(); uzytkownicy.Add(createdUser); } } // 操作完成后刷新网格,确保数据源最新 StateHasChanged(); isVisible = false; }
第三步:初始化数据源
在页面初始化的OnInitializedAsync方法里就请求接口给uzytkownicy赋值,确保它不会为null:
protected override async Task OnInitializedAsync() { uzytkownicy = await Http.GetFromJsonAsync<List<Uzytkowniccy>>("api/uzytkownicy") ?? new List<Uzytkowniccy>(); }
内容的提问来源于stack exchange,提问作者Masterkk121
相关产品推荐
相关产品推荐

