Toon posts:

[asp.net c#] User controls variabelen overgeven aan webform

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedendag allemaal,

Op deze witte zaterdag ben ik druk in de weer met een ASP.NET webapplicatie welke in grote lijnen dit moet doen:
- Pagina moet weten of de gebruiker is ingelogd
- Indien niet, inloggen
- Als je bent ingelogt: content weergeven

De content is verspreid over verschillende webforms welke ik graag allemaal de intelligentie wil geven om te controleren of de gebruiker is ingelogt.

Naast een boolean "ingelogt" onthoudt mijn session tracker ook nog zaken zoals: > Voornaam, tussenvoegsel en achternaam (voor een vriendelijke groet)
> Paar booleans zoals: "smileys weergeven" e.d.

De session tracker is een klasse met de naam "Poortwachter". Deze klasse kan gebruikers:
- inloggen (gegevens controleren en sessie wegschrijven in database)
- updaten (het laatste levensteken bijwerken in de database)
- Uitloggen (alle sporen verwijderen...)

Nu is het zo dat ik elke keer, op elke pagina, moet controleren of de Poortwachter al bestaat, zo dus:

n.b.: het stukje "cs." geeft aan waar de klasse zich bevind, in java termen: "het package"

code:
1
2
3
4
5
6
7
        cs.Poortwachter pw;
        private void Page_Load(object sender, System.EventArgs e)
        {
            //Session tracker 
            if(Session["poortwachter"] == null){ Session["poortwachter"] = new cs.Poortwachter(); pw = (cs.Poortwachter) Session["poortwachter"]; } else {  pw = (cs.Poortwachter) Session["poortwachter"]; }
            
            //enz...


voor de leesbaarheid heb ik hier het IF statement even "uitgevouwen"
code:
1
2
3
4
5
6
if(Session["poortwachter"] == null){ 
      Session["poortwachter"] = new cs.Poortwachter(); 
      pw = (cs.Poortwachter) Session["poortwachter"]; 
} else {    
      pw = (cs.Poortwachter) Session["poortwachter"];
}


Het mooie van het verhaal is dat in de Poortwachter klasse methoden zitten zoals: getNaam(), welke dan een juist geformateerde naam terugeeft:
bv "Piet van der Sluis"

Maar om toegang te krijgen tot deze data moet ik dus wel steeds die "aanmaak code" in mijn webform zetten. Nu is dat niet erg, ik bedoel ik heb ook een klembord met CTRL+C & CTRL+V, maar ik vermoed dat er nog een betere optie is....

Alle webforms maken allemaal gebruik van een User Control: header.ascx
In header.ascx staat het menu uitgewerkt (een rijtje met hyperlinks) en dit bestand komt dus overal in mijn applicatie.

Nu maakte ik de logische redenering, als ik nou in die User Control de sessie controleer, dus de Poortwachter klasse defineer, dan kan ik deze overal gebruiken...
Maar dat gaat dus niet zo eenvoudig. Daarom mijn vraag: Kan ik variabelen van een user control overgeven naar een webform zonder gebruik van overmatige code in het webform?

En wie weet heb jij wel een geniaal idee hoe ik dit anders zou kunnen aanpakken? Ik sta open voor alle reacties.

[ Voor 5% gewijzigd door Verwijderd op 28-02-2004 11:33 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Waarom kijk je niet eens naar Forms Authentication?

https://fgheysels.github.io/


  • Beowulf27
  • Registratie: September 2003
  • Laatst online: 11-09-2024
Een simpele aanpak is om al je pagina's te laten overriden van een basis pagina, die je poortwachter code in de OnInit uitvoert.

Working @ http://www.tricode.nl


Verwijderd

Topicstarter
Overide?

Daar had ik inderdaad nog niet aan gedacht! Het leven is soms simpeler dan je denkt. Ik ga het gelijk proberen.

Verwijderd

Je kan alsvolgt een variabele doorgeven aan een usercontrol:
In de code van je ascx een proporty zetten (in dit voorbeeld iets.ascx.vb)
Visual Basic .NET:
1
2
3
4
5
6
7
8
Public Property Nummer() As Integer
        Get
            Return _Nummer
        End Get
        Set(ByVal Value As Integer)
            _Nummer = Value
        End Set
End Property


Deze control kan je dan in de html van de hoofdpagina (hier default.aspx) registreren :
code:
1
<%@ Register TagPrefix="iets" TagName="bla" Src="iets.ascx" %>

en dan in de html
code:
1
<iets:bla id="ietst" Nummer=1337 runat="server"></iets:bla>

Dit is niet erg handig, je kan het nummer (of een andere variabele) ook meegeven in de codebehind van de hoofdpagina (bvb default.aspx.vb). Daarvoor moet je je control declareren (vs.net doet dit niet automagisch in tegenstelling tot de gewone controls)
Visual Basic .NET:
1
Protected WithEvents iets1 As hierjenamespace.iets

en dan ergens in één of andere methode:
Visual Basic .NET:
1
ietst.Nummer=1337

Maar in jou geval zou een goed gebruik van Forms Authentication eventueel in combinatie met een role based security model veel code/tijd uitsparen :)

Verwijderd

Topicstarter
Bedankt voor je input!

Ik ga me verdiepen in form-based authentication.

  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01-2025

6K

is ook zo...

Kun je me laten weten of dit een goede oplossing voor je geboden heeft? de form authentication bedoel ik dan? Ik zit ook te twijfelen of ik het zelf wil doen, of de form authentication ga gebruiken nl

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


Verwijderd

Topicstarter
Ik wil het je best laten weten, maar ik ben nu eerst bezig met een 10 daagse rijopleiding bij de anwb in amsterdam. Dus het zal even gaan duren. Dan zal ik evalueren of het nu nog de moeite is om de form authentication te implementeren, aangezien de poortwachter al redelijk zijn werk doet.

Ik houd je op de hoogte.

  • Dennis van der Stelt
  • Registratie: Januari 2000
  • Laatst online: 27-05 08:27
Forms Authentication werkt het beste. Doe dat nou maar, dat is niet voor niets ontwikkelt.

Ik maak zelf een authentication ticket aan en sla die gecodeerd op in een cookie. Het is nogal wat code wat ik niet zo maar kan posten, maar als je de http://www.asp.net/ examples bekijk, kun je daar best wat van jatten.

Kijk bijv. eens naar DotNetNuke v2. Die schijnt goed in elkaar te zitten.

Ik heb zelf dat iedereen mijn pagina's mag zien, maar ze moeten ietwat aangepast worden voor gebruikers die zijn ingelogd. En dan nog een aantal pagina's in een bepaalde directory die alleen door wat admins benaderbaar moet zijn. Dat stel je dan weer leuk in in je web.config (of een extra web.config in die directory) en dat werkt allemaal goed. Voor die directory heb ik dan een login.aspx ingesteld waar je naartoe geleid wordt als je nog niet ben ingelogd.

Doe maar gewoon, dan doe je al gek genoeg.


  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01-2025

6K

is ook zo...

ja precies, dat wil ik dus ook. Ik doe dat nu ook al handmatig voor mijn counter. Als mensen een pagina willen bezoeken en typen rechtstreeks die pagina in, ipv mijn domein of 1 van de subdomeinen, dan controleer ik het cookie en redirect ik ze naar mijn default.aspx, alwaar het cookie gemaakt wordt en geteld wordt.

Ik had al het idee dat dit voor inloggen 'gemakkelijker' beter kon met de forms, maar... ik wil de gebruikers niet in de web.config opnemen maar in een database
(me = nOOb, dus weet nog niet of dat mogelijk is)

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
6K schreef op 02 maart 2004 @ 10:14:
ja precies, dat wil ik dus ook. Ik doe dat nu ook al handmatig voor mijn counter. Als mensen een pagina willen bezoeken en typen rechtstreeks die pagina in, ipv mijn domein of 1 van de subdomeinen, dan controleer ik het cookie en redirect ik ze naar mijn default.aspx, alwaar het cookie gemaakt wordt en geteld wordt.

Ik had al het idee dat dit voor inloggen 'gemakkelijker' beter kon met de forms, maar... ik wil de gebruikers niet in de web.config opnemen maar in een database
(me = nOOb, dus weet nog niet of dat mogelijk is)
Dat is allemaal mogelijk met Forms Authentication. Je moet dan alleen niet de Authenticate method gebruiken die in het .NET framework geleverd is, maar je eigen authenticatie - method schrijven.

pseudo-code:
code:
1
2
3
4
if( myUserObject.Login() )
{
     FormsAuthentication.RedirectFromLoginPage(...)
}


Waarbij die Login member van je custom user object dus gewoon in je databank gaat gaan kijken of er een record is met de usernaam en passwoord van de betreffende user.
Indien dit het geval is, maak je een authentication ticket, schrijf je dat weg en redirect je de gebruiker naar z'n gerequeste pagina.

https://fgheysels.github.io/


  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01-2025

6K

is ook zo...

mooi... hier ga ik verder mee. Mocht het wel/niet lukken, laat ik nog even weten (duurt nog wel een klein weekje voor ik hier aan toe kom) :|

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶

Pagina: 1