Pregunta

Por favor, ayudarme a averiguar lo que está mal con este código:

Tengo página ASP.NET con un botón visible.

Cuando el usuario hace clic en él - que las instancias MiClase (su implementación está en el directorio AppCode) y se vuelve invisible (button2 se hace visible).

Cuando hago clic button2 Plantea "Referencia a objeto no establecida como instancia de un objeto".

Lo que parece ser el problema?

{
    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
    }
}
¿Fue útil?

Solución

Desde en devolución de datos no se vuelve a crear la referencia noviTest a MyClass.

Puede añadirlo a la estado de vista de mantener una referencia a él. (Suponiendo MyClass es serializable).
En Button1_Click:

ViewState("noviTest") = noviTest;

A continuación, en Button2_Click:

var noviTest = ViewState("noviTest");

Otros consejos

noviTest es nulo Button2_Click interior.

intentar algo como esto:

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

Esta causa noviTest voluntad de crear una instancia para cada solicitud de página, independientemente de qué botón se ha hecho clic. Esto puede no ser la mejor solución para su aplicación en particular (no estoy familiarizado con el resto de la lógica en esta clase), pero usted consigue la idea.

Cada visita al código subyacente es algo así como ejecutar el código desde cero, nada se ha creado o conservado para usted entre las visitas a la página.

Así que cuando se pulsa el segundo botón noviTest no está inicializado y, por tanto, cuando se intenta llamar a .getID se obtiene una excepción de referencia nula.

Para hacer frente a esto es necesario para asegurar que noviTest se inicializa. Si usted quiere tener que persistió entre las visitas a la página que necesita utilizar algún mecanismo para almacenar o volver a crear la instancia. Almacenarlo lo haría (probablemente) sesión de uso. Para recrear usaría cualquiera de sesión o viewdata que persista un valor clave, que luego permitirá recuperar el estado del objeto de almacenamiento de algún tipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top