2010-11-22 2 views
1

Ich muss ein Objekt vom Start einer Seite initialisieren und die Objekte durch die bestimmte Seite verwenden, wie kann ich es tun.Wie initialisiert man ein Objekt beim Start einer Seite in einer asp.net-Seite

// Block zum

  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; 

jetzt initialisiert werden Ich möchte die ctxt innerhalb der Seite und Steuerungsereignisse verwenden. Ich habe versucht, es in der Seitenladung zu initialisieren, aber ich kann ctxt nicht zugreifen.

Antwort

2

Im Allgemeinen müssten Sie ein Feld deklarieren, das Sie im Konstruktor oder page_load/page_init instanziieren würden. Abhängig davon, was Sie erstellen, möchten Sie möglicherweise auch am Ende die Ressourcen explizit entsorgen.

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

Sie können dann gegebenenfalls zu anderen Klassen wechseln. Wenn Sie dafür etwas leistungsfähigeres benötigen oder die Instanz auf eine Weise existieren müssen, die Sie von anderen Objekten aus nutzen können, wo Sie nicht explizit durchgehen können oder wollen, können Sie einen IoC-Container wie z als Castles Windsor, mit dem Sie Ressourcen perWebRequest auflösen und instantiieren können - aber es kann ein wenig eingerichtet werden und hat seine eigenen Macken.

+0

Es sieht aus, als ob Sie nur nicht, dass es für das Leben der Seite, sondern auch zwischen den Anfragen zu wollen. Die Verwendung des Cache-Objekts ist möglicherweise nicht sinnvoll, wenn die Informationen, die Sie benötigen, für jeden Benutzer gelten. In diesem Fall könnte ein Sicherheitsfehler auftreten. Die Sitzung ist besser, aber überall zugänglich. ViewState kann verwendet werden, um Informationen zwischen Anfragen zu speichern, fügt aber Seitengewicht hinzu und sollte nicht für sensible Daten wie Kreditkartendetails verwendet werden, da es verschlüsselt in den Cache des Browsers gelangt. Alles andere als Viewstate erfordert, dass Sie die Initialisierung zwischen Anforderungen verwalten. – Mark

2

Versuchen Sie stattdessen -

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

Wenn die Seite für Post-Back geht, werden die Werte wieder auf Null initialisiert. auf andere Weise –

+0

Überprüfen Sie, ob die Seite Postback ist und initialisieren Sie die Werte. if (! IsPostBack) {// irgendein Code} – pavanred

Verwandte Themen