Frage

Bitte helfen Sie mir, um herauszufinden, was mit diesem Code falsch ist:

Ich habe ASP.NET-Seite mit einem Knopf sichtbar.

Wenn Benutzer darauf klickt - es Instanzen MyClass (ihre Umsetzung ist in AppCode Verzeichnis) und wird unsichtbar (button2 wird sichtbar).

Wenn ich auf button2 es wirft Exception „Objektverweis auf eine Instanz eines Objekts nicht festgelegt“.

Was scheint das Problem zu sein?

{
    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
    }
}
War es hilfreich?

Lösung

Da auf Postbacks der noviTest Verweis auf MyClass ist nicht neu erstellt werden.

Sie können es auf den Ansichtszustand hinzufügen, um einen Verweis zu halten. (MyClass Unter der Annahme serializable).
In Button1_Click:

ViewState("noviTest") = noviTest;

Dann in Button2_Click:

var noviTest = ViewState("noviTest");

Andere Tipps

noviTest ist null innerhalb Button2_Click.

Versuchen Sie etwas wie folgt aus:

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;
}

Dies bewirkt, dass noviTest zu auf jeder Seite Anfrage instanziert wird, unabhängig davon, welche Schaltfläche geklickt wurde. Dies kann nicht die beste Lösung für Ihre Anwendung sein (ich bin nicht mit dem Rest der Logik in dieser Klasse), aber Sie bekommen die Idee.

Jeder Besuch in der Code-Behind ist eine Art, wie Sie den Code von Grund auf neu ausgeführt wird, nichts eingerichtet ist oder für Sie zwischen den Besuchen zu Seite erhalten.

Also, wenn Sie drücken Sie die zweite Taste noviTest ist nicht initialisiert und daher, wenn Sie versuchen, .getID Sie rufen einen NULL-Verweis Ausnahme erhalten.

damit umgehen Sie müssen sicherstellen, dass noviTest initialisiert wird. Wenn Sie haben wollen es zwischen den Besuchen auf der Seite beibehalten müssen Sie einen Mechanismus zu jedem Speicher verwenden oder die Instanz neu. So speichern Sie es würden Sie (wahrscheinlich) Verwendung Sitzung. Neu zu erstellen würden Sie entweder Sitzung oder Bildschirmtextsystem verwenden, um einen Schlüsselwert zu bestehen, die dann erlauben würden Sie den Objektstatus aus dem Speicher irgendeiner Art abzurufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top