Question

S'il vous plaît aidez-moi à comprendre ce qui ne va pas avec ce code:

J'ai la page ASP.NET avec un seul bouton visible.

Lorsque l'utilisateur clique dessus - il MyClass instances (sa mise en œuvre est dans le répertoire AppCode) et devient invisible (Bouton2 devient visible).

Lorsque je clique sur button2 il AUGMENTATIONS « Référence d'objet non définie à une instance d'un objet » Exception.

Ce qui semble être le problème?

{
    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
    }
}
Était-ce utile?

La solution

Depuis la noviTest lors de la publication référence à MyClass est pas recréée.

Vous pouvez l'ajouter à la viewstate de garder une référence. (En supposant MyClass est sérialisable).
En Button1_Click:

ViewState("noviTest") = noviTest;

Ensuite, dans Button2_Click:

var noviTest = ViewState("noviTest");

Autres conseils

noviTest est nulle à l'intérieur de Button2_Click.

Essayez quelque chose comme ceci:

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

Cette PROVOQUERONT noviTest à instancier sur chaque demande de page, quelle que soit la touche a été cliqué. Ce ne peut pas être la meilleure solution pour votre application particulière (Je ne connais pas le reste de la logique dans cette classe), mais vous voyez l'idée.

Chaque visite au code-behind est un peu comme l'exécution du code à partir de zéro, rien créé ou préservé pour vous entre les visites à la page.

Alors, lorsque vous appuyez sur le deuxième bouton noviTest n'est pas initialisés et donc lorsque vous essayez d'appeler .getID pour vous faire une exception de référence null.

Pour faire face à cela, vous devez vous assurer que noviTest est initialisés. Si vous voulez avoir persisté entre les visites à la page que vous avez besoin d'utiliser un mécanisme soit magasin ou recréer l'instance. Pour stocker vous le feriez (probablement) session d'utilisation. Pour recréer vous utilisez soit session ou vidéotex persister une valeur clé qui vous permettra de récupérer l'état d'objet de stockage d'une certaine sorte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top