You need to enable JavaScript to run this app. ASP.NET跨页面传输TextBox数据出现NullReferenceException异常问题求解
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET跨页面传输TextBox数据出现NullReferenceException异常问题求解

ASP.NET跨页面传值空引用错误修复方案

错误根源

  • 数据库操作顺序错误:你在未打开数据库连接的状态下直接执行cmd.ExecuteNonQuery()插入数据,代码直接触发异常跳转到catch块,Session赋值的逻辑完全没有执行,第二页读取到的Session全部为null,调用ToString()时触发空引用异常。
  • 缺少空值校验:跨页面传值的场景下未对Session做非空判断就直接调用方法,只要任意一个Session键不存在就会报错。

修复步骤

1. 修正第一页的数据库操作逻辑

将数据库连接打开的操作放到执行SQL之前,同时将Session赋值逻辑放到插入成功的判断分支中,避免插入失败时存储无效值:

SqlConnection conn = new SqlConnection("Data Source=LARI-LUCAS;Initial Catalog = Licenta_BD; Integrated Security = True");
SqlCommand cmd;           

try
{
    // 先打开连接再执行SQL
    conn.Open();
    cmd = new SqlCommand("insert into Date_studenti_UPT (universitate,facultate,sectie,nume,prenume,gen,an,media,marca,numar) values(@universitate,@facultate,@sectie,@nume,@prenume,@gen,@an,@media,@marca,@numar) ", conn);
    cmd.Parameters.AddWithValue("@universitate", txtUniv.Text);
    cmd.Parameters.AddWithValue("@facultate", txtFac.Text.Trim());
    cmd.Parameters.AddWithValue("@sectie", txtSectie.Text.Trim());
    cmd.Parameters.AddWithValue("@nume", txtNume.Text.Trim());
    cmd.Parameters.AddWithValue("@prenume", txtPrenume.Text.Trim());
    cmd.Parameters.AddWithValue("@gen", txtGen.Text.Trim());
    cmd.Parameters.AddWithValue("@an", txtAn.Text.Trim());
    cmd.Parameters.AddWithValue("@media", txtMedie.Text.Trim());
    cmd.Parameters.AddWithValue("@marca", txtMarca.Text.Trim());
    cmd.Parameters.AddWithValue("@numar", txtNr.Text.Trim());

    int rowsAffected = cmd.ExecuteNonQuery();

    if (rowsAffected == 1)
    {
        // 插入成功后再赋值Session并跳转
        Session["Nume"] = txtNume.Text;
        Session["Prenume"] = txtPrenume.Text;
        Session["Gen"] = txtGen.Text;
        Session["An"] = txtAn.Text;
        Session["Media"] = txtMedie.Text;
        Session["Universitate"] = txtUniv.Text;
        Response.Redirect("Profil.aspx");
    }
    else
    {
        Label12.Text = "Eroare actualizare date utilizator!";
    }
}
catch (Exception ex)
{
    Label12.Text = "Eroare la deschidere baza date " + ex.Message;
}
finally
{
    conn.Close();
}

2. 修正第二页的Session读取逻辑

使用安全类型转换+空值合并运算符处理空值场景,避免空引用异常:

protected void Page_Load(object sender, EventArgs e)
{
    // as string转换失败会返回null,配合??运算符为空时赋值空字符串
    txtA.Text = Session["An"] as string ?? string.Empty;
    txtG.Text = Session["Gen"] as string ?? string.Empty;
    txtM.Text = Session["Media"] as string ?? string.Empty;
    txtN.Text = Session["Nume"] as string ?? string.Empty;
    txtP.Text = Session["Prenume"] as string ?? string.Empty;
    txtUn.Text = Session["Universitate"] as string ?? string.Empty;
}

额外排查项

如果修改后仍然无法读取Session,确认web.config配置文件的system.web节点下已开启Session功能(默认已开启,被手动修改的情况才需要检查):

<sessionState mode="InProc" cookieless="false" timeout="20" />

内容的提问来源于stack exchange,提问作者Lari Ana-Maria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:45:05