2009-06-01 3 views
0

Il est clair que les variables membres d'une page ASP.NET perdent leur étendue chaque fois que la page est actualisée.Quelqu'un pourrait-il expliquer ce comportement intéressant des événements de pipeline HTTP ASP.NET?

J'ai le code ci-dessous pour afficher une grille de « Alertes » avec des capacités d'édition:

public partial class Alerts : System.Web.UI.Page 
{ 
    private _WikiSyntaxEngine; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     _WikiSyntaxEngine = new WikiSyntaxEngine(); 
    } 

    protected void gvAlerts_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     var alert = (DataModel.Alert)(e.Row.DataItem); 
     // Below is the only line of interest, because only when published 
     // to the server would it throw an exception... 
     string html = _WikiSyntaxEngine.ConvertWikiTextToHTML(alert.Description); 
    } 
} 

Il était seulement sur le serveur de développement auquel je publiais a fait ce code fail (par exemple jette un NullReferenceException parce _WikiSyntaxEngine était null) lors d'une mise à jour de la ligne.

Cependant, sur mon ordinateur local, le code s'exécute très bien - la ligne est mise à jour et la grille se rafraîchit comme prévu.

Depuis, j'ai corrigé le code pour que le WikiSyntaxEngine soit un singleton, ou la façon dont il aurait dû être conçu depuis le début car il ne devrait pas avoir à être instancié partout où il est utilisé.

Ma question est donc comment l'événement Page_Load peut être appelée avant gvAlerts_Databound() sur ma machine locale (comme prévu), mais pas appelé la machine de développement entraînant la NullReferenceException pour _WikiSyntaxEngine?

Répondre

1

Je suppose que votre gvAlerts GridView est défini dans le balisage ASP.NET de la page. Si tel est le cas, il s'agit probablement de DataBound dans l'événement OnInit(), et non sur Page_Load(), où vous instanciez WikiSyntaxEngine.

Vous devez probablement utiliser OnInit() pour instancier votre WikiSyntaxEngine si votre GridView est lié avant Page_Load.

Quant à savoir pourquoi vous obtenez un comportement différent dans le développement et la production est encore un mystère pour moi.

Questions connexes