Avatar billede snyde Nybegynder
21. juli 2005 - 17:54 Der er 15 kommentarer og
1 løsning

session bean i asp.net

Hej eksperter,

Jeg er java koder, og i jsp intiliseres en klasse normalt i en session sådan

<jsp:useBean id=\"users\" scope=\"session\" class=\"dk.ifad.DocServer.users\" />

Kan jeg ikke gøre det samme med en user kontrol i asp.net

På forhånd tak for jeres svar


Med venlig hilsen

Anders
Avatar billede snepnet Nybegynder
21. juli 2005 - 20:11 #1
nu kender jeg ikke den nøjagtige betydning af det du har skrevet, men umiddelbart er der ikke nogen pendant i asp.net.

du kan lægge objekter i session på følgende vis:

SomeClass someObject = new SomeClass();
Session["someName"] = someObject;

og hvis du skal hente objektet igen:
SomeClass sc = Session["someName"] as SomeClass;

mvh
Avatar billede snepnet Nybegynder
21. juli 2005 - 20:15 #2
direkte adgang til session kan du få fra et Page-objekt, og hvad kontroller angår kan du altid komme til det ved this.Page.Session.
mvh
Avatar billede arne_v Ekspert
21. juli 2005 - 22:08 #3
<jsp:useBean id="users" scope="session" class="dk.ifad.DocServer.Users" />

svarer til

<%
dk.ifad.DocServer.Users users = session.getAttribute("users");
if(users == null) {
  users = new dk.ifad.DocServer.Users();
  session.setAttribute("users");
}
%>

hvilket jo ligner ASP.NET temmeligt meget
Avatar billede snepnet Nybegynder
22. juli 2005 - 09:15 #4
hehe - ja det må man sige :o)
Avatar billede snyde Nybegynder
23. juli 2005 - 16:41 #5
Okay, så man kan ikke tage en userkontrol som en bean i java.

Arne din løsning vil selvfølgelig virke, men vil ikke have buisness kode i mine aspx sider.

Derfor må løsningen være:

override protected void OnInit(EventArgs e) {
UserBean users = Session["users"];
  if(users == null) {
    users = new UserBean();
    Session["users"] = users;
  }
  else{
    this.Page.Session = (UserBean)Session["users"];
    // eller: this = (UserBean)Session["users"];

  }           
  InitializeComponent();
  base.OnInit(e);
}

Det kan dog ikke implementeres af følgende grunde.
1.) Jeg kan ikke lave en ny instans af UserBean, da en user kontrol er abstrakt.
2.) Jeg kan hverken sætte this eller this.Page.Session, da min user kontrol er read only.

Kan det virkelig ikke lade sig gøre at implementere dette på nogen måde. En anden mulighed er selvfølgelig, at lave en ren UserBean.cs smide den i en session, og benytte den i min UserBean.asxc.cs user kontrol.

Men det var dog ikke det jeg havde tænkt mig :-)
Avatar billede arne_v Ekspert
23. juli 2005 - 16:50 #6
nu var mit kode eksempel altså java ...

<jsp:useBean virker kun på beans og en bean skal have en constructor uden argumenter

så der er altså forskel på en bean og en user kontrol

jeg vil ikke kalde den her form for kode for business kode

men det er da et meget sundt princip ikke at ville blande kode og HTML

med hensyn til user control skal du nok have snepnet til at hjælpe dig - det ligger
uden for mit ekspertise område
Avatar billede snyde Nybegynder
23. juli 2005 - 17:13 #7
Okay jeg håber snepnet kan hjælpe mig.

Ja selvfølgelig er der forskel på en bean og en user kontrol, men der er dog den lighed at de begge kan intiliseres via tags i henholdsvis jsp og aspx sider.

Eksemplet var for at blot for at uddybe, at jeg mangler samme funktionalitet i asp.net, som jeg har i java.

Mht. til at det var java kode, så undrede syntaksen mig også, men kunne jo være at det var J#. Ja jeg vil gerne holde opdelingen i ren MVC, da det er pænest i mine øjne.
Avatar billede arne_v Ekspert
23. juli 2005 - 20:16 #8
med min begrænsede viden om ASP.NET user controls så vil jeg mene at de svarer
til JSP taglibs
Avatar billede snepnet Nybegynder
24. juli 2005 - 01:08 #9
hej med jer ... jeg har ikke erfaring med jsp, så jeg kan ikke rigtig drage paraleller, men :

en UserControl svarer mere til en Page/Form, og adskilder sig ikke ved så meget andet end at den ikke renderer en serverside <form></form>, og ikke som udgangspunkt kan kaldes direkte (http://host/site/usercontrol.ascx) - ud over det, fungerer den i meget vid udstrækning som en webform.

UserControl er ikke en abstrakt klasse, og kan godt instantieres, men loades normalt i en eksisterende form programmatisk form ved :

// i en given page-klasse
Control c = LoadControl(<virtual path>);
Controls.Add(c);

... er det sådan noget du gerne vil?

Jeg fortår ikke helt det med at lægge en UserControl i session - det virker mere som om det bare en helt almindelig klasse du har brug for, og ikke en UserControl - men du må lige give mig et los, hvis jeg er helt ved siden af.

Ønsker du at lave noget funktionalitet du kan instantiere fra tags, men som ikke giver dig de begrænsninger en UserControl gør, kan du lave din egen klasse baseret på Control-klassen.
Laver du specialiseringer af den, vil du kunne oprette en forekomst som en hvilken som helst anden serverkontrol ved f.eks.

<zzz:SomeControl id="ID" runat="server"></zzz:SomeControl>

Og du kan indsætte den programmatisk ved :

someContainer.Controls.Add(new SomeControl());

og ..... hvis du har behov for et UI - kan du selvfølgelig også få det med sådan en, men du har ikke andre muligheder end at kode det. designeren kan ikke hjælpe med noget der.

... jeg er lidt i vildrede med hvad det er du ønsker at opnå (sorry) - så jeg er bare for at du må hjælpe lidt på vej, hvis ovenstående er irellevant.

mvh
Avatar billede snyde Nybegynder
28. juli 2005 - 12:32 #10
Hej senepnet,

Tak for dit meget uddybende svar, jeg kommenter lige løbende:

UserControl er ikke en abstrakt klasse, og kan godt instantieres, men loades normalt i en eksisterende form programmatisk form ved :
// i en given page-klasse
Control c = LoadControl(<virtual path>);
Controls.Add(c);
... er det sådan noget du gerne vil?

Ja det sådan noget jeg gerne vil :-)
Men framworket har da i hvertfald lavet min klasse apstrakt, den har følgende signatur:
public abstract class UserBean : System.Web.UI.MobileControls.MobileUserControl{}

Jeg fortår ikke helt det med at lægge en UserControl i session - det virker mere som om det bare en helt almindelig klasse du har brug for, og ikke en UserControl - men du må lige give mig et los, hvis jeg er helt ved siden af.

Sagen er at jeg i min userkontrol styre login funktionalitet, samt hvilke roller de givne bruger skal have dvs. menu struktur mm. Det kunne selvfølgelig godt ligges ud i en almindelig klasse, men så ville denne alligevel blive meget tæt koblet til min userkontrol, så svaret er både ja og nej vil jeg sige :-)

Det giver point herfra :-)
Avatar billede snepnet Nybegynder
28. juli 2005 - 14:46 #11
jamen så får du et svar :o)
... jeg er ikke velbevandret i Mobile-sagerne, og der kan meget vel være en hel del forskelle som jeg ikke er bekendt med.
mvh
Avatar billede snepnet Nybegynder
07. august 2005 - 00:51 #12
hej snyde :o)
kan vi lukke her?
mvh
Avatar billede snepnet Nybegynder
07. september 2005 - 17:01 #13
snyde?
Avatar billede snyde Nybegynder
07. september 2005 - 17:56 #14
Ja :-)
Avatar billede snepnet Nybegynder
07. september 2005 - 17:59 #15
hehe :o)

hej - kan du ikke acceptere svaret?
(du skal markere mit navn i en boks der skulle komme frem til dig, og trykke på accepter)

mvh
Avatar billede snyde Nybegynder
07. september 2005 - 18:04 #16
he he okay

Det hjalp lidt :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester