Hallo Leute,
ich habe mir gerade dieses Tuto angeschaut:
http://www.galileocomputing.de/openbook/asp/asp110002.htm#Rxxasp11607InstanzeneigenerKlassenindenSitzungsdatenspeichern
Es geht darum, ein Objekt global Zugreifbar zu machen (auf allen ASP.NET Seiten).
So hier mal meine global.asax:
<%@ Application Language="C#" %>
<object id="user"
runat="server"
scope="session"
class="Test.User.User"
/>
So, jetzt will ich von einer aspx Seite darauf zugreifen. Funktioniert wunderbar.
Aber wenn ich aus der Code Behind Klasse darauf zugreifen will, scheint das Objekt nicht in der Intellisense auf - und der Zugriff funktioniert auch nicht.
Muss mensch etwas bestimmtes beachten wenn mensch solche Scope Objekte in Code Behind Klassen verwenden will?
Hab leider nichts gefunden.
lg
Bakunin
Wenn Du für die Global.asax ebenfalls eine codebehind-Datei erstellst, hast Du einen Klassennamen, in den Du Dein ApplicationInstance-Objekt casten kannst.
Dann sollten die gewünschten Eigenschaften auch verfügbar sein.
Grüsse
Hallo Cord Worthmann,
danke für die Antwort. Ich habe eine CodeBehind Datei erstellt, alles funktioniert soweit auch wunderbar. Allerdings kann ich aus der CodeBehind Datei auch nicht auf das "user" Objekt zugreifen.
Kannst du mir vl genauer erklären was du meinst?
Hier die Global.asax
<%@Application Language="C#" Inherits="Global" %>
<%@Assembly name="core" %>
<object id="user"
runat="server"
scope="session"
class="Test.User.User"
/>
Die zugehörigen Global.asax.cs:
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e) {
// Code that runs on application startup
}
void Application_End(object sender, EventArgs e) {
// Code that runs on application shutdown
}
void Application_Error(object sender, EventArgs e) {
// Code that runs when an unhandled error occurs
//todo log4net
}
void Session_Start(object sender, EventArgs e) {
// Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e) {
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
}
}
Also wie gesagt ich würde gerne ganz einfach auf das "user" Objekt - welches in der Global.asax definiert ist - hier auch zugreifen können (und auch in allen anderen CodeBehind files).
also zB in der Login.aspx.cs:
protected void Login_Authenticate(object sender, AuthenticateEventArgs e) {
try {
Test.User.User newUser = Test.User.User.Login(Login.UserName, Login.Password);
//hier will ich jetzt auf das Session Scope Objekt "user" zugreifen
user = newUser;
Response.Redirect(@"./Index.aspx");
} catch (Test.User.Exceptions.LoginFailedException LoginFailedException) {
}
}
lg
Bakunin
Versuche doch mal...
...
Test.User.User newUser = Test.User.User.Login(Login.UserName, Login.Password);
//hier will ich jetzt auf das Session Scope Objekt "user" zugreifen
this.Context.ApplicationInstance.user = newUser;
...
Sollte das auch nicht funktionieren, musst Du wohl das user-Object ebenfalls in der Global.asax-codebehind-Datei anlegen.
Deklarieren musst du es dort auf jeden Fall, denke ich - ist mit normalen Controls ja schliesslich auch so.
Grüsse