【问题标题】:Null Reference exception when accessing property in OnClick访问 OnClick 中的属性时出现空引用异常
【发布时间】:2010-04-24 15:21:11
【问题描述】:

请帮我弄清楚这段代码有什么问题:

我有一个可见的 ASP.NET 页面。

当用户单击它时 - 它实例化 MyClass(它的实现在 AppCode 目录中)并变为不可见(button2 变为可见)。

当我单击 button2 时,它会引发“对象引用未设置为对象的实例”异常。

似乎是什么问题?

{
    public MyClass noviTest;

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        noviTest = new MyClass(TextBox1.Text);
        Button1.Visible = false;
        Button2.Visible = true;
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        Label1.Text=noviTest.getID; //this is the critical line
    }
}

【问题讨论】:

    标签: c# asp.net app-code


    【解决方案1】:

    由于在回发时没有重新创建对 MyClass 的 noviTest 引用。

    您可以将其添加到视图状态以保留对其的引用。 (假设 MyClass 是可序列化的)。
    在 Button1_Click 中:

    ViewState("noviTest") = noviTest;
    

    然后在Button2_Click中:

    var noviTest = ViewState("noviTest");
    

    【讨论】:

    • 谢谢。我试过这个并且错误是“当前上下文中不存在名称'ViewState'”???
    【解决方案2】:

    noviTestButton2_Click 中为空。

    试试这样的:

    protected void Page_Load(object sender, EventArgs e)
    {
        noviTest = new MyClass(TextBox1.Text);
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Button1.Visible = false;
        Button2.Visible = true;    
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        Label1.Text = noviTest.getID;
    }
    

    这将导致noviTest 在每个页面请求上被实例化,而不管单击了哪个按钮。这可能不是您特定应用程序的最佳解决方案(我不熟悉本课程中的其余逻辑),但您明白了。

    【讨论】:

      【解决方案3】:

      每次访问代码隐藏有点像从头开始运行代码,在访问页面之间没有为您设置或保留任何内容。

      因此,当您点击第二个按钮时,noviTest 未初始化,因此当您尝试调用 .getID 时,您会得到一个空引用异常。

      要解决这个问题,您需要确保 noviTest 已初始化。如果您想让它在对页面的访问之间保持不变,您需要使用某种机制来存储或重新创建实例。要存储它,您将(可能)使用 session.要重新创建,您可以使用 session 或 viewdata 来保存一个键值,然后允许您从某种存储中检索对象状态。

      【讨论】:

      • 我尝试使用 viewstate,但我认为 session 对我来说是唯一的解决方案。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2023-04-06
      相关资源
      最近更新 更多