[ toxi_programer @ 21.08.2009. 16:25 ] @
Vidim da se slabo piše ovih dana, a mene pritegao jedan problem.

Naime, imam Master stranicu i običnu stranicu koja koristi tu master stranu. U masteru proveravam da li je korisnik ulogovan, te ako nije(ili nema prava da pristupi određenoj stranici), redirektujem ga na određenu adresu.
Što se tiče korisnika, postoji hijerarhija klasa ali ovde je bitno da osnovna klasa sadrži svojstvo koje vraća tipizirani DataRow. Ako korisnik nije ulogovan, instancira se klasa Visitor i njoj su sve vrednosti unutar DataRow-a null ili šta je kojoj default( pošto je to neulogovan posetilac, dakle nema podatke u bazi).
Problem nastaje ako korisnik poseti određenu stranicu B.aspx i pri tom nije ulogovan. I to samo ako na toj stranici postoji neki kod koji poziva user.DataRow.nesto. Onda dobijem exception jer, realno, to je polje null.

U master stranici proveravam da li je korisnik ulogovan i ako nije ulogovan, a posećuje stranicu za koju mora da bude ulogovan - npr. B.aspx, poziva se ovakav kod:
Code:
Response.Redirect("default.aspx", true); 

I redirect će raditi... Ali problem je što će prvo i ostatak koda biti izvršen( kod koji se nalazi u slave stranici i koji će baciti exception).

Čak i ako stavim break point pre mesta gde program baca exception i pokrenem debug, izvršavanje se tu ne zaustavi nego mi baci exception da je vrednost nekog polja null.


Dakle meni je potrebno iz master strane da prekinem izvršavanje i onog koda koji se nalazi u slave stranici. Pokušavao sam i sa Request.End ali problem ostaje isti.
Pa se nadam da neko od vas zna kako da rešim ovo?
[ pl4stik @ 22.08.2009. 14:39 ] @
Citat:
toxi_programer
I redirect će raditi... Ali problem je što će prvo i ostatak koda biti izvršen (kod koji se nalazi u slave stranici i koji će baciti exception).

Čak i ako stavim break point pre mesta gde program baca exception i pokrenem debug, izvršavanje se tu ne zaustavi nego mi baci exception da je vrednost nekog polja null.


Kako mislish ne zaustavi se, pa break point kolko znam za to sluzi ...

Mozda mozes i da izkontrolises ex ako je nesto null....

Probaj u "slave" strani da probas da kontrolises jel logovan il nije ....

Bilo bi dobro i da postavish primer koda, il bar tog dela (npr uproscenu konstrukciju) ..

pogotovu onu koja se ne zaustavlja na break





[ toxi_programer @ 22.08.2009. 22:06 ] @
Citat:
pogotovu onu koja se ne zaustavlja na break

;D Sad ti misliš da sam retard xD

No to nije poenta, ne bih da oduzimam vreme. Evo ovako ide ono što mi treba:

Postoji master stranica i ova fja:
Code:

    protected void Page_Load(object sender, EventArgs e)
    {
        User u = User.GetUser(this.Request); //uzme podatke iz cookie-a i prema njima izvadi podatke iz baze i formira odgovarajuću klasu izvedenu iz User
        u.CheckAccessRight(this.Request, this.Response); //ako nema prava da ide na ovu stranicu, ovde bi trebalo da se ZAUSTAvi izvršavanje koda, ali to ne radi :((
        FormirajInfo(u); //nebitno sad
    }


Bitan deo CheckAccess fje:

Code:


        public void CheckAccessRight(HttpRequest httpSrc, HttpResponse httpResponse)
        {
            ..... 
            .....
            if (!allowAccess)
            {
                //Ovde je problem. Želim da se na ovom mestu prekine dalje izvršavanje koda master stranice i takođe da se ne izvrši kod stranice koja koristi ovu master stranu.
                //Znači pokušao sam sa pisanjem ove dve funkcije ali nije pomoglo... Redirekt će se uraditi, ali tek kada se ceo kod slave strane izvrši. A on može da baci error
               // ako korisnik nije ulogovan (pisao sam gore u prvom postu zašto je to tako).
                httpResponse.Redirect("~/default.aspx?a=r",true);
                httpResponse.End();
            }
        }


Naravno, mogu ja da idem kroz sve slave stranice koje mogu da bace exception i da ponovo proveravam access right i ako mi da false, da izađem iz problematične funkcije, ali to je mnoogooo copy/paste koda i to onda nije rešenje.

Konkretan error koji dobijem nije bitan i nema nikakvu ulogu, ali eto i to ću da postavim:
Citat:

Line 3121: public int WarehouseId {
Line 3122: get {
Line 3123: return ((int)(this[this.tableUser.WarehouseIdColumn]));
Line 3124: }
Line 3125: set {

Dakle u ADO.NET tipiziranom dataRow-u. Ne može da konvertuje jer za datog tipa korisnika( "visitor", što u stvari predstavlja neulogovanog korisnika iliti onog koji nema podatke u bazi, i SAMO za ovog bez podataka u bazi je problem, iz očitih razloga) ne postoje podaci u bazi i onda ne može null da konvertuje u int.

Ali opet - kod želim da zaustavim izvršavati ranije jer će nema smisla izvršavati ga kada korisnik ne sme da pristupi ovoj stranici i sve što treba da se desi jeste da se redirektuje. Ali eto, dao sam kod kojim pokušavam da redirektujem ali...Dakle redirect radi, ali prvo se izvrši sav kod, što je neželjeno ponašanje u ovom slučaju( inače i ne mogu da shvatim zašto bi neko ako već radi redirect izvrašavao ostatak koda trenutne stranice)...

Any help? :/
[ pl4stik @ 23.08.2009. 07:03 ] @
Off:

Daleko od retard al verovatno "nije normalan kad moze da ceo dan zvera u kod, i josh on to stvarno razume"

-pravnica kod mene u firmi-

On:

Nego, jeste bilo malo zaebancije al posto u svakoj sali ima malo sale tako i ja u ovom pitanju nikako ne mog da shvatim kako nece da stane kad mu stavish brake. Meni to mirise na prekombinaciju jer kad nece da stane verovatno nije ni izvrsen i onda se desi ex koji i treba da se desi i sve ide svojim tokom....

...u svetlu ovog gore trenutno mi pada na pamet da kad proverish cookie i ako nije registrovan, registruj ga ko anonimus sa nekim default vrednostima pa cepaj dalje

[Ovu poruku je menjao pl4stik dana 23.08.2009. u 08:25 GMT+1]
[ pl4stik @ 23.08.2009. 07:24 ] @
Objasnjavam ja toxi-ju da mu ne radi if, e jbg

Eventualno mozes da proveris one strane na asp.net/learn ima o *.master pages kako se prenose podaci u custom varijantama i te stvari, mozda "se prepoznash"
[ toxi_programer @ 08.09.2009. 19:22 ] @
Ladno moj odgovor nije objavljen :o Heh, ovaj Firefox baguje za sve pare...
Uglavnom, rekao sam bio "Pl4stik, hvala na vremenu" i da ću koristiti rešenje sa dodatnim redom u bazi.

E, sad sam naišao na super tekst o master page sistemu i rešio sam problem.

Ukratko, Page_Load slave stranice će se pokrenuti PRE Page_Load master stranice. Da ne veruješ ali eto tako je... Probo sam, zaista je tako
Zato moj break point u master page load funkciji "nije radio" -> exception je bio bačen pre njega, a logično ko bi predpostavio da se prvo izvršava slave...


Elem, problem sam rešio override-ovanjem Page_Init funkcije. Sad redosled izvršavanja ove funkcije kod slave i master strane ide logičnim putem( da ne poveruješ...), pa tako se page_init master strane uvek prvi izvršava. I ja onda u Page_Init prebacim logiku koja određuje pravo pristupa i, ako je to potrebno, prekinem trenutni request pre nego što je slave stranica i počela da se izvršava.

Takođe sam saznao čudnu pojavu da je slave stranica na kraju parent master strani

Evo sjajan link na pomenutu temu:
http://www.odetocode.com/Articles/450.aspx