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

Blazor Telerik开发CRUD应用时编辑数据无法保存报错如何解决

错误根因

你遇到的Value cannot be null. (Parameter 'source')报错指向Enumerable.First方法的入参source为null,结合你的代码有两个核心问题:

  1. 你绑定给TelerikGrid的数据源uzytkownicy列表在执行更新逻辑时未初始化,或者接口请求失败后被置为null,调用uzytkownicy.First()时触发空引用异常
  2. 你的编辑逻辑标记完全写反了: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:36:05