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
?