Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[asp.net] <asp:if> tags

Pagina: 1
Acties:

  • semicon
  • Registratie: Augustus 2003
  • Laatst online: 20-08 14:04
Hallo,

Ik heb, ondanks dat ik het niet wilt, soms toch code in mijn pagina's staan. Zoals hieronder:
code:
1
2
3
4
5
</div>
<% if (title != "") { %>
    <h1><%= title %></h1>
<% } %>
<div enz enz...


Wat ik mij afvroeg, of je in .net net als met java soort van <asp:if>-tag's hebt?
Ik heb hier niets over kunnen vinden, maar het lijkt net of .netters het probleem niet hebben :P

Ik heb het wel met een literal opgelost, maar dat vind ik net zo slordig, en wil ik ook niet!

Vandaar de vraag, hoe los ik het dan op, en is er misschien toch een "if"-tag ?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Nee, asp:if tag bestaan niet in .NET. Wel kun je zelf een user control schrijven welke verschillende templates gebruikt. Als je vervolgens een expressie aan de template hangt.

Maar waarom zou je uberhaupt code in de aspx plaats, daarvoor hebben we immers de codebehind.

If it isn't broken, fix it until it is..


  • semicon
  • Registratie: Augustus 2003
  • Laatst online: 20-08 14:04
Niemand_Anders schreef op woensdag 03 oktober 2007 @ 12:51:
Maar waarom zou je uberhaupt code in de aspx plaats, daarvoor hebben we immers de codebehind.
Anders kijk je het voorbeeld eventjes... Het probleem is dat je soms niet anders kan. Hoe kan je anders een titel soms laten zien en soms niet... dan zet je bijv "<h1>" in je codebehind (al helemaaal iets dat ik niet wil!)

Kan me niet voorstellen dat .netters het probleem niet kennen. In java hebben we hier een mooie oplossing voor, dus waarom in .net niet?

  • newpegasus
  • Registratie: Juni 2003
  • Laatst online: 13-03-2022

newpegasus

Hertog

Um, je kunt toch in je codebehind de tekst of zichtbaarheid van een label aanpassen (dmv een if), dat label staat dan tussen de h1 tags. Of mis ik iets?

[ Voor 5% gewijzigd door newpegasus op 03-10-2007 12:59 ]

GuitarFacts | Last.fm | Google Zoekmachine Optimalisatie


  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 20:07
je kan toch panels maken met inhoud en deze panels hiden of showen in je codebehind?

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Idd je doet gewoon iets als het volgende

aspx
code:
1
<asp:label id="myLabel" runat="server" style="...."></asp:label>

en in codebehind
C#:
1
2
3
4
5
6
7
8
9
if(titel == null || titel.Trim().Equals( String.Empty ) )
{
    myLabel.Visible = false;
}
else
{
    myLabel.Text = titel;
    myLabel.Visible = true;
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Het is niet onmogelijk in .NET maar dan krijg je dus wat je zelf al in je TS doet.

C#:
1
2
3
4
        <%if(voorwaarde)%>
        <h1>1</h1>
        <%else%>
        <h1>2</h1>


maar er zijn zoals al door mijn voorgangers benoemd, mooiere oplossingen.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:16

gorgi_19

Kruimeltjes zijn weer op :9

semicon schreef op woensdag 03 oktober 2007 @ 12:44:
Hallo,

Ik heb, ondanks dat ik het niet wilt, soms toch code in mijn pagina's staan. Zoals hieronder:
code:
1
2
3
4
5
</div>
<% if (title != "") { %>
    <h1><%= title %></h1>
<% } %>
<div enz enz...


Wat ik mij afvroeg, of je in .net net als met java soort van <asp:if>-tag's hebt?
Ik heb hier niets over kunnen vinden, maar het lijkt net of .netters het probleem niet hebben :P

Ik heb het wel met een literal opgelost, maar dat vind ik net zo slordig, en wil ik ook niet!

Vandaar de vraag, hoe los ik het dan op, en is er misschien toch een "if"-tag ?
Hoezo is het slordig? :? Je mixed logica en presentatie door elkaar. Als je echt dit soort ranzigheid wilt, kan je een eigen expressionBuilder gaan maken of met ASP 3.0 gaan werken :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 28-11 11:15

sopsop

[v] [;,,;] [v]

Code uit je voorbeeld zou ik als volgt doen:

aspx:
Visual Basic .NET:
1
<h1 id="h1title" runat="server"/>

codebehind:
Visual Basic .NET:
1
2
3
4
5
6
if MyTitle.trim.Length>0 then
    h1title.InnerText = MyTitle
    httitle.visible = True
else
    httitle.visible = False
end if

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

sopsop schreef op woensdag 03 oktober 2007 @ 14:40:
Code uit je voorbeeld zou ik als volgt doen:

aspx:
Visual Basic .NET:
1
<h1 id="h1title" runat="server"/>

codebehind:
Visual Basic .NET:
1
2
3
4
5
6
if MyTitle.trim.Length>0 then
    h1title.InnerText = MyTitle
    httitle.visible = True
else
    httitle.visible = False
end if
Dat is imo de netste oplossing.
De aangedragen methode <h1><asp:Literal/Label/Whatever /></h1> zal er altijd voor zorgen dat er een leeg h1 element zal blijven staan. Dat is niet netjes en afaik valideert dit niet.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
TeeDee schreef op woensdag 03 oktober 2007 @ 14:42:
[...]

Dat is imo de netste oplossing.
De aangedragen methode <h1><asp:Literal/Label/Whatever /></h1> zal er altijd voor zorgen dat er een leeg h1 element zal blijven staan. Dat is niet netjes en afaik valideert dit niet.
In mijn voorbeeld had ik expres niet de H1 eromheen gezet, maar gewoon een style aan de label geven.
Als je wat complexere dingen wilt doen zul je waarschijnlijk toch al snel met een Panel of een PlaceHolder aan de gang willen gaan.
Verder haalt het natuurlijk niet zo veel uit welk control je gebruikt, het gaat er meer om dat je gewoon je controls op Visible = false kunt zetten en daarom niet meer met een IF tag zou hoeven te werken.

[ Voor 15% gewijzigd door Woy op 03-10-2007 15:39 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

gorgi_19 schreef op woensdag 03 oktober 2007 @ 14:10:
[...]

Hoezo is het slordig? :? Je mixed logica en presentatie door elkaar. Als je echt dit soort ranzigheid wilt, kan je een eigen expressionBuilder gaan maken of met ASP 3.0 gaan werken :)
wat zit er in ASP 3.0 dan dat dit probleem kan verhelpen?

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Overigens controlleer je String gelijkheid niet met == maar met .equals() (Java toch), omdat String een object is, en geen primitief datatype.

Going for adventure, lots of sun and a convertible! | GMT-8


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 28-11 11:15

sopsop

[v] [;,,;] [v]

rwb schreef op woensdag 03 oktober 2007 @ 15:38:
[...]

In mijn voorbeeld had ik expres niet de H1 eromheen gezet, maar gewoon een style aan de label geven.
[..]
Met een style aan je label kun je iets eruit laten zien als een h1-element, het wordt er echter geen h1-element. Semantisch gezien is dat een flink verschil, maar ook SEO-technisch is het gebruik van een H1 element aan te raden. 'Lukraak' span's opmaken als andere elementen maakt van je client-side code een enorme puinhoop (ik weet dat ik chargeer in dit geval, maar dit is echt iets waar je een automatisme voor moet kweken en dus die 'extra mile' maken om semantisch correcte client code af te leveren).
Snake schreef op woensdag 03 oktober 2007 @ 19:49:
Overigens controlleer je String gelijkheid niet met == maar met .equals() (Java toch), omdat String een object is, en geen primitief datatype.
Dat is an sich geen probleem in C# of VB.net. Ik vind het wel netter om eerst een trim over de string te halen en vervolgens te testen op de lengte. Tenzij je spaties in het titlestring wel wilt meenemen als 'goede' content.

[ Voor 24% gewijzigd door sopsop op 03-10-2007 20:16 ]


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Snake schreef op woensdag 03 oktober 2007 @ 19:49:
Overigens controlleer je String gelijkheid niet met == maar met .equals() (Java toch), omdat String een object is, en geen primitief datatype.
dat is idd zo in java maar niet in C#

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
4of9 schreef op donderdag 04 oktober 2007 @ 09:08:
[...]


dat is idd zo in java maar niet in C#
Idd in C# is de == operator voor string is overloaded en roept gewoon weer Equals aan.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:16

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op woensdag 03 oktober 2007 @ 19:45:
[...]


wat zit er in ASP 3.0 dan dat dit probleem kan verhelpen?
Daar werk je alleen maar met dit soort constructies met IF-Then, in een meestal compleet gemixte ontwerp van presentatie en logica :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

gorgi_19 schreef op donderdag 04 oktober 2007 @ 10:21:
[...]
Daar werk je alleen maar met dit soort constructies met IF-Then, in een meestal compleet gemixte ontwerp van presentatie en logica :)
Ah, good ol' times ;(

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

gorgi_19 schreef op donderdag 04 oktober 2007 @ 10:21:
[...]

Daar werk je alleen maar met dit soort constructies met IF-Then, in een meestal compleet gemixte ontwerp van presentatie en logica :)
heb je het dan over asp classic want in asp.net 3.0 kan ik er niks van vinden

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:16

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op maandag 08 oktober 2007 @ 15:45:
[...]


heb je het dan over asp classic want in asp.net 3.0 kan ik er niks van vinden
ASP 3.0 is dan ook niet ASP.Net 3.0. Ik heb het over de oude ASP.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

hehe, had al zo'n vermoeden dat ik iets over het hoofd zag :)

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Ik heb een vraag die hier op lijkt. Ik werk met een Repeater control, en daarin wil ik een bepaald element wel of niet laten zien aan de hand van de waarde van een bepaalde property. Hoe zou ik dit kunnen oplossen? De oplossing met zo'n control en die dan verbergen gaat in dit geval niet werken denk ik. Of is er wel een manier om dit te doen?

Noushka's Magnificent Dream | Unity


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

Meestal doe ik ongeveer zoiets:
C#:
1
2
3
//repeater meuk
<asp:Label id="Meuk" runat="server" Visible='<%GetLabelVisibility%>'>Melp</label>
//repeater meuk


Codebehind:
C#:
1
2
3
4
5
public bool GetLabelVisibility()
{
 //op basis van een property/value/session/whatever
 //een bool terug geven
}

Of ik moet je helemaal verkeerd begrijpen?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Komt al in de buurt, maar ik wil de controle dan uitvoeren op het huidige item dat door de repeater heen gaat.

Ik probeer het nu met een asp:Panel waarin ik dan in het Visible attribuut een databind expressie zet, maar dat lijkt helaas niet te mogen.

Noushka's Magnificent Dream | Unity


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

Michali schreef op dinsdag 09 oktober 2007 @ 11:24:
Komt al in de buurt, maar ik wil de controle dan uitvoeren op het huidige item dat door de repeater heen gaat.

Ik probeer het nu met een asp:Panel waarin ik dan in het Visible attribuut een databind expressie zet, maar dat lijkt helaas niet te mogen.
Zal even neuzelen, want je kan het huidige Repeater Item doorgeven. (dacht ik)

In een erg oud project had ik het ongeveer zo gedaan:
C#:
1
<%# GetLabelVisibility(Container.DataItem) %>

Codebehind:
C#:
1
2
3
4
public bool GetLabelVisibility(object Row)
{
  //werk het verder af met een DataRow
}

Meer kan ik even niet vinden, heb hier helaas ook de documentatie even niet bij de hand ;)

[ Voor 27% gewijzigd door TeeDee op 09-10-2007 11:33 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Dat werkt inderdaad, bedankt!

Noushka's Magnificent Dream | Unity


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Mischien dat je ook iets met de ItemCreated en ItemDatabound events kan doen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:47
rwb schreef op dinsdag 09 oktober 2007 @ 13:59:
Mischien dat je ook iets met de ItemCreated en ItemDatabound events kan doen.
Dat is inderdaad de netste oplossing.

Het ItemDataBound event krijgt een event-parameter mee. Je kunt dan dit doen:
C#:
1
2
Label NaamLabel = (Label)e.item.FindControl("NaamLabel");
NaamLabel.visible = false;

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
ItemDataBound is het geworden, bedankt! Dat is inderdaad een nettere oplossing, voelt ook goed aan. Zo heb ik tenminste weer het gevoel voldoende controle te hebben op de juiste plaats.

Noushka's Magnificent Dream | Unity


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:47
Mooi opgelost :).
Pagina: 1