2010-11-22 3 views
1

Je dois initialiser un objet depuis le début d'une page et utiliser les objets à travers la page particulière comment puis-je le faire.comment initialiser un objet au démarrage d'une page dans une page asp.net

// Bloc à initialisés

  XTContext.UserContext UContext = new XTContext.UserContext(); 
      XTContext.Context ctxt = new XTContext.Context(); 
      XTErrorCollection.ErrorCollection eContext = new XTErrorCollection.ErrorCollection(); 
      ctxt = (XTContext.Context)Cache["sessionfContext"]; 
      ctxt.eContext = eContext; 
      ctxt.uContext = UContext; 

maintenant je veux utiliser le ctxt dans les événements de page et de contrôle. J'ai essayé de l'initialiser dans le chargement de la page, mais je ne peux pas accéder à ctxt.

Répondre

2

En général, vous devez déclarer un champ que vous instanciez dans le constructeur ou page_load/page_init. En fonction de ce que vous êtes en train de créer, vous pouvez également vouloir disposer explicitement des ressources à la fin.

public class MyPage 
{ 
    private object myobject = null; 
    public MyPage() 
    { 
     myobject = new Object(); 
    } 
} 

Vous pouvez ensuite passer à d'autres classes selon les besoins. Si vous avez besoin de quelque chose de plus puissant pour cela ou avez besoin que l'instance existe d'une manière que vous pouvez utiliser à partir d'autres objets où vous ne pouvez pas ou ne voulez pas passer explicitement, vous pouvez utiliser un conteneur IoC tel comme Castles Windsor que vous pouvez utiliser pour résoudre et instancier des ressources PerWebRequest - mais il peut prendre un peu de mise en place et a ses propres caprices.

+0

Il semble que vous n'êtes pas seulement le vouloir pour la vie de la page, mais aussi entre les demandes. Il se peut que l'utilisation de l'objet Cache ne soit pas judicieuse si les informations dont vous avez besoin sont basées sur un utilisateur, vous pourriez introduire une faille de sécurité si c'est le cas. La session est meilleure mais sera accessible partout. ViewState peut être utilisé pour stocker des informations entre les requêtes, mais ajoute un poids de page et ne doit pas être utilisé pour quelque chose de sensible comme les détails de carte de crédit, car bien que chiffrés, ils finissent dans le cache du navigateur. Tout autre que viewstate vous demandera de gérer l'initialisation entre les requêtes. – Mark

2

Essayez plutôt -

public partial class YourPage : System.Web.UI.Page 
{ 
    XTContext.UserContext UContext; 
    XTContext.Context ctxt; 
    XTErrorCollection.ErrorCollection eContext; 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     UContext = new XTContext.UserContext(); 
     ctxt = new XTContext.Context(); 
     eContext = new XTErrorCollection.ErrorCollection();      

     ctxt = (XTContext.Context)Cache["sessionfContext"]; 
     ctxt.eContext = eContext; 
     ctxt.uContext = UContext; 
    } 
} 
+0

lorsque la page passe pour post-retour, les valeurs sont de nouveau initialisées à null. de toute autre manière –

+0

Vérifie si la page est postback et initialise les valeurs. if (! IsPostBack) {// du code} – pavanred

Questions connexes