If statement

Tags:    .net

<< < 12 > >>
Helt basalt spørgsmål. Jeg har en Label og en button som skal skjules når User er logget ind.

Jeg vil lave If statement der siger noget noget nær nedenstående

protected void Page_Load(object sender, EventArgs e)
{
if ( User = logget ind )
{
Label1.Visible = false;
CreatUserAccountButton.Visible = false;

}
}

Expression er forkert, men kan nogen hjælpe mig her?



11 svar postet i denne tråd vises herunder
5 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
User er en egenskab på HttpContext objektet. Du kan altid (så længe der er et web request kørende) få fat i HttpContext ved:

HttpContext.Current

dvs. for at få fat i User:

HttpContext.Current.User

Håber det hjælper.



C# ved ikke hvad "logget ind" betyder. Du skal lave en variabel som indeholder denne værdi. Der må ikke være mellemrum i variabler. Yderlige bruger du = som tildeler værdien som ikke findes i "logget ind", og ikke == som sammenligner værdierne i variablerne.



En god ide ved condition-tjek er at du skriver det konstante udtryk til venstre i tjekket.

Hvis du nu skulle tjekke om en variabel er 0 , så skriv
0 == i
istedet for
i == 0.

For hvis du så kommer til at kun lave et "=", så giver det dig en fejl og så vil der ikke komme mærkelig fejl i din kode.

Men din fejl er det som Søren siger - if( User = logget ind) tildeler User den værdi der ligger i "logget ind" og den værdi bliver brugt til at tjekke om if er true eller false.
Bruger (User == logget ind)



Prøv med:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 12.11.2009 17:17 af Bruger #13488
Jeg vil mene at du kan tjekke det sådan her:
Fold kodeboks ind/udKode 




okay, jeg tror måske at denne tråd skal i ASP.NET.

Men det er mere fordi, at jeg ved ikke hvad der skal stå i den expression. Jeg benytter mig at ASP.net Membership. Derfor må man kunne spørge systemet om brugeren er logget ind eller ej. Ved bare ikke hvordan man gør...

Der må være et eller andet jeg kan tjekke, når brugeren er logget ind eller ikke logget ind?



Mads - dette gælder mere eller mindre ikke i C# som ikke har arvet C's måde at evalueere alle udtryk til booleans. Derudover så personligt set ser kode som skrives på den måde du beskriver nu altså ikke særlig pænt ud efter min og mange andres mening. Jeg ville helt klart ikke anbefale nogle at skrive kode efter din måde - heller ikke i C.

Ang spørgsmålet, som andre har skrevet så giver din betingelse i din if-sætning på ingen måde mening - og det er vidst allerede nævnt hvordan du kan ordne det :).



Mads - dette gælder mere eller mindre ikke i C# som ikke har arvet C's måde at evalueere alle udtryk til booleans. Derudover så personligt set ser kode som skrives på den måde du beskriver nu altså ikke særlig pænt ud efter min og mange andres mening. Jeg ville helt klart ikke anbefale nogle at skrive kode efter din måde - heller ikke i C.


Ja, pjat med om det virker, bare det ser pænt ud?
Hvem er "mange"? Og hvorfor ikke anbefale det hvis det fanger fejl?





Ja, pjat med om det virker, bare det ser pænt ud?
Hvem er "mange"? Og hvorfor ikke anbefale det hvis det fanger fejl?


Fordi i C# gælder det som sagt kun på booleans og det er sjældent at man overhovedet vil kunne skrive kode der vil lave disse fejl da det skal være i stilen if(b == true)... og dette kan skrives ned til blot if(b)...

Jeg kan desværre på stående fod ikke lige nu komme med konkrete links til disse "mange" men lad os bare lade det ligge ved at jeg ikke kan huske hvornår jeg sidst har set noget .Net kode med denne slags "sikkerhedsnet for begynder fejl". Hvis jeg skulle læse igennem kode skrevet på den måde ville jeg skulle bruge længere tid på at få det læst og forstået fordi det i mit hoved logisk set er helt vendt på hovedet. I stedet for at læse hvad det er man tester for lighed så læser man nu værdien man sammenligner med først og det er sjældent at det er behjælpeligt i at læse og forstå koden.

Det er i min verden et lævn udviklere har taget med sig fra C, C++ og nogle endda PHP. Jeg har aldrig brugt dette og det var kun i de meget spæde dage da jeg programmerede at jeg kom tæt på at lave disse fejl. Jeg mener det er bedre at forstå forskellen på = og == og herefter være klar over hvad det er man laver. At forstå forskellen giver også et meget bedre indblik i hvad det er man laver og så bliver man OBS på det helt automatisk. Men som sagt i C# er dette fuldstændig unødvendigt da det kun er booleans som kan evaluere til booleans. Jeg ser det som vigtigt at man ved hvad man laver og at man ikke forsøger at lave disse underlige ting for at forebygge fejl - det svarer lidt til at man hurtigt lærer at man gerne må sætte for mange semikolonner og man derfor begynder at gøre det på sindsyg vis, og så kan man ende med kode som følger:

Fold kodeboks ind/udKode 


Dette er en fejl som kan være ekstrem svær at finde frem til, og jeg har set den blandt flere begyndere. Dette er selvfølgelig indtil de finder ud af hvad semi-kolonnet's betydning faktisk er og herefter mindskes disse fejl betydeligt.



Indlæg senest redigeret d. 12.11.2009 13:22 af Bruger #714
Ja, de forslag der kom her til sidst virker fornuftige. Intellisence kan bare ikke genkende dem i en Usercontrol.
Skriver jeg dem i en web form, så kan de godt genkendes? Nogle der har et forslag til hvordan jeg klare den ?



<< < 12 > >>
t