[ASP.NET C#] Line break, maar hoe...?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 14-09 14:01
Na veel Googlen kom ik er maar niet achter:
Ik heb de volgende C# code:

C#:
1
2
3
HtmlGenericControl nwsbr_blok = new HtmlGenericControl("div");
nwsbr_blok.Attributes.Add("class", "nwsbr_blok");
content_container.Controls.Add(nwsbr_blok);


Hoe kan ik na deze code een linebreak (voor de duidelijk in de source) toevoegen?
Met Klassiek ASP deed ik altijd & vbCrlf en moet ik dus in C# bijv. iets doen met Environment.NewLine?

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Waarom gebruik je inline code/codebehind en niet gewoon asp.net markup?

Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 14-09 14:01
bigbeng schreef op dinsdag 13 oktober 2009 @ 03:05:
Waarom gebruik je inline code/codebehind en niet gewoon asp.net markup?
Ik neem aan dat je bedoeld waarom ik geen ASP.NET controls gebruik zoals bijv. <asp:Panel />?
Dit omdat de HTML dynamisch naar de pagina worden geschreven, afhankelijk van gebeurtenissen, volgens mij is bovenstaande dan de enige optie, toch?

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Het idee achter ASP.Net is dat je je gebeurtenissen en html van elkaar scheidt. Door panels te gebruiken die zichtbaar/onzichtbaar zijn afhankelijk van de situatie, kun je hetzelfde bereiken als wanneer je de html zelf samenstelt (of dmv een htmlgeneric obejct genereert) en m.i. met minder moeite. Als je een panel onzichtbaar maakt, dan wordt de bijbehorende inhoud niet naar de client gestuurd. Maak je de panel zichtbaar, dan wordt de inhoud (inclusief tabs/spaces) naar de client gestuurd. Het punt wat ik wil maken is dat het de duidelijkheid in de code ten goede komt als je niet met een htmlgenericobject werkt en zeker probeert response.writelines te vermijden.

Een ander pad wat je in kunt gaan is gebruik maken van user/custom controls (<- zoekterm) die je inlaadt op het moment dat je ze nodig hebt. Dit kan vooral handig zijn als je pagina's vaak dezelfde layout hebben, maar een (functioneel) verschillende inhoud.

Tenslotte kun je ook nog kijken naar master pages (wederom een zoekterm), waarmee je een zelfde effect kan bereiken, maar wat meer vanuit een top-down benadering werkt. En als je wilt polderen, dan kun je ook nog mixen tussen de twee laatstgenoemde methodes.

Acties:
  • 0 Henk 'm!

Verwijderd

Hoe het wel moet vermijden en toch maar gewoon het antwoord geven wat je zoekt: met een literal kun je line breaks aan de gegenereerde html toevoegen.
Als je je trouwens druk gaat maken over de opmaak van de html code die ASP.NET voor jou maakt dan ga je een moeilijke tijd tegemoet.

Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 08-09 20:34
Urk schreef op dinsdag 13 oktober 2009 @ 04:29:
[...]

Ik neem aan dat je bedoeld waarom ik geen ASP.NET controls gebruik zoals bijv. <asp:Panel />?
Dit omdat de HTML dynamisch naar de pagina worden geschreven, afhankelijk van gebeurtenissen, volgens mij is bovenstaande dan de enige optie, toch?
je kan ook dynamisch een panel updaten.
Panel1.Text = "<b>dikkie dik</b> is <br /> cool";

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 11:39

Haan

dotnetter

Verwijderd schreef op dinsdag 13 oktober 2009 @ 05:21:
Als je je trouwens druk gaat maken over de opmaak van de html code die ASP.NET voor jou maakt dan ga je een moeilijke tijd tegemoet.
Inderdaad, het laatste waar je tijd in zou willen steken is je druk maken over de HTML die wordt gegenereerd door ASP.Net :X Besteed die tijd dan nuttiger door bijv. de juiste controls op de juiste plaats in te zetten.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Als je perse ook de gegenereerde HTML goed wilt hebben icm codebehind, kan je ook eigne controls maken op basic van .ascx (al dan niet door die .ascx alleen als template te gebruiken en dus min of meer als 'subcontrol' van de control)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

bigbeng schreef op dinsdag 13 oktober 2009 @ 04:46:
Het idee achter ASP.Net is dat je je gebeurtenissen en html van elkaar scheidt. Door panels te gebruiken die zichtbaar/onzichtbaar zijn afhankelijk van de situatie, kun je hetzelfde bereiken als wanneer je de html zelf samenstelt (of dmv een htmlgeneric obejct genereert) en m.i. met minder moeite.
Daar heb je deels wel gelijk in, in die zin dat je het wel of niet tonen van bepaalde html zou kunnen sturen vanuit de code behind. Dit zou de TS wel helpen, de line breaks kunnen dan gewoon in html in een panel genest worden.

Helaas is, bij mijn weten, dit niet altijd op deze manier te implementeren, wat als je dynamisch een structuur wilt implementeren mbv een bulleted list en styling die zorgt voor het 'uitschuiven'? Dan kun je er niet aan ontkomen om die bulleted list in de code behind op te bouwen en te koppelen aan de webpagina.

Als je echt gebeurtenissen en html, of control en view resp., wilt scheiden dan zou je voor een pure MVC moeten gaan. Dat wordt inmiddels ook ondersteund door de ASP.NET.

En zoals eerder opgemerkt, ASP.NET genereert zelf ook een bak ellende waardoor je m.i. nooit W3C strict html als resultaat kunt krijgen.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op dinsdag 13 oktober 2009 @ 09:12:
En zoals eerder opgemerkt, ASP.NET genereert zelf ook een bak ellende waardoor je m.i. nooit W3C strict html als resultaat kunt krijgen.
Om die bak ellende wat te verminderen zou je ook eens kunnen kijken naar de control adapters :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Verwijderd schreef op dinsdag 13 oktober 2009 @ 09:12:
Helaas is, bij mijn weten, dit niet altijd op deze manier te implementeren, wat als je dynamisch een structuur wilt implementeren mbv een bulleted list en styling die zorgt voor het 'uitschuiven'? Dan kun je er niet aan ontkomen om die bulleted list in de code behind op te bouwen en te koppelen aan de webpagina.
Kun je wel: dan gebruik je nl. een repeater.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

R4gnax schreef op dinsdag 13 oktober 2009 @ 09:45:
[...]


Kun je wel: dan gebruik je nl. een repeater.
Hoe zie je dat voor je, als je te maken hebt met een onbekend aantal nested levels? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

gorgi_19 schreef op dinsdag 13 oktober 2009 @ 09:18:
[...]

Om die bak ellende wat te verminderen zou je ook eens kunnen kijken naar de control adapters :P
R4gnax schreef op dinsdag 13 oktober 2009 @ 09:45:
[...]


Kun je wel: dan gebruik je nl. een repeater.
Even vluchtig naar deze links gekeken, ziet er allemaal wel interessant uit en lijkt inderdaad te kunnen doen wat ik nu zelf allemaal in de code behind doe. Ga ik van de week eens mee spelen :)

Dat krijg je ervan als je te lang met Windows Forms in 1.1 zit te prutsen (ja ik weet het, niet mijn beslissing :o ) en weer webapplicaties gaat ontwikkelen.

Dan zou je dus wel je html zoveel mogelijk kunnen scheiden zonder echt van MVC gebruik te maken. Volgens mij ontkom je er dan toch niet aan dat ASP.NET Forms nog zelf wat rommel rendered, zoals je viewstate en callbacks, maar dat is nog wel te overzien....

Correct me if I am wrong, want ik loop dus nogal wat achter....

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op dinsdag 13 oktober 2009 @ 09:55:
Dan zou je dus wel je html zoveel mogelijk kunnen scheiden zonder echt van MVC gebruik te maken. Volgens mij ontkom je er dan toch niet aan dat ASP.NET Forms nog zelf wat rommel rendered, zoals je viewstate en callbacks, maar dat is nog wel te overzien....

Correct me if I am wrong, want ik loop dus nogal wat achter....
Heb je de keus? Pak dan gelijk MVC :) Viewstate ga je niet aan ontkomen in webforms :)

[ Voor 4% gewijzigd door gorgi_19 op 13-10-2009 10:44 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Verwijderd schreef op dinsdag 13 oktober 2009 @ 09:12:
[...]

En zoals eerder opgemerkt, ASP.NET genereert zelf ook een bak ellende waardoor je m.i. nooit W3C strict html als resultaat kunt krijgen.
Excuse me? Dat is schromelijk overdreven. Net even gecheckt met een van de sites die wij hebben gemaakt, 1 warning in transitional, en 2 warnings en 1 error in strict (we gebruiken transitional overigens).

Die error komt omdat het form een name element heeft wat niet mag in strict. (Weet niet eens zeker of ASP.NET uberhaupt die name per se nodig heeft, dus die kan misschien zelfs weg.) Al met al valt het reuze mee, en kun je prima zinnige (X)HTML outputten met ASP.NET.

[ Voor 7% gewijzigd door Grijze Vos op 13-10-2009 12:39 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 14-09 14:01
bigbeng schreef op dinsdag 13 oktober 2009 @ 04:46:
Het idee achter ASP.Net is dat je je gebeurtenissen en html van elkaar scheidt. Door panels te gebruiken die zichtbaar/onzichtbaar zijn afhankelijk van de situatie, kun je hetzelfde bereiken als wanneer je de html zelf samenstelt (of dmv een htmlgeneric obejct genereert) en m.i. met minder moeite. Als je een panel onzichtbaar maakt, dan wordt de bijbehorende inhoud niet naar de client gestuurd. Maak je de panel zichtbaar, dan wordt de inhoud (inclusief tabs/spaces) naar de client gestuurd. Het punt wat ik wil maken is dat het de duidelijkheid in de code ten goede komt als je niet met een htmlgenericobject werkt en zeker probeert response.writelines te vermijden.

Een ander pad wat je in kunt gaan is gebruik maken van user/custom controls (<- zoekterm) die je inlaadt op het moment dat je ze nodig hebt. Dit kan vooral handig zijn als je pagina's vaak dezelfde layout hebben, maar een (functioneel) verschillende inhoud.

Tenslotte kun je ook nog kijken naar master pages (wederom een zoekterm), waarmee je een zelfde effect kan bereiken, maar wat meer vanuit een top-down benadering werkt. En als je wilt polderen, dan kun je ook nog mixen tussen de twee laatstgenoemde methodes.
Bedankt voor je advies _/-\o_ , ik ben idd nog niet zo lang bezig met ASP.NET en kom dus van klassiek ASP.
Voor zover ik mij kan herinneren heb ik dat wel geprobeerd om panels te gebruiken, heb alleen niet gedacht aan het wel of niet visible maken daarvan, hoewel ik dat in mijn main menu wel doen. Ik gebruik al wel master pages met succes en dat gaat prima :)

Ik neem aan dat de manier die jij noemt wel wat sneller gaat dan en zeker ook minder code kost, het zijn nu toch wel tig regels door al die attributen die bij enkele HTML elementen worden toegevoegd. Volgens mij liep ik tegen een probleem op waardoor dit niet kon/lukte.
Aan de andere kant gebruik ik ook unobtrusive javascript, waarmee je d.m.v. je JS code ook on the fly DOM elementen genereerd en toevoegd.

Custom controls zal ik zeker nog een keer aantoekomen en lijkt me voor mij ideaal, omdat ik wel wat meer conrole zou willen hebben over de HTML die wordt uitgespuugd, ik neem aan dat dat daarmee kan. Daar kom ik later nog wel aan toe...weet ik nu nog niet veel over....

Als laatste zie ik trouwens niet wat master pages te maken hebben met het dynamisch genereren van HTML elementen, or do I see that wrong?

Een groot nadeel van ASP.NET heb ik al wel gevonden, namelijk het genereren van irritante ID's en name's op HTML elementen, zoals ctl00$ContentPlaceHolder1$test en dat je dat niet eens ergens uit kan zetten, opzich prima maar niet als je zelf verstand hebt van wat je doet. Dit uitzetten kan blijkbaar pas vanaf .NET framework 4.0.

Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 14-09 14:01
Verwijderd schreef op dinsdag 13 oktober 2009 @ 05:21:
Hoe het wel moet vermijden en toch maar gewoon het antwoord geven wat je zoekt: met een literal kun je line breaks aan de gegenereerde html toevoegen.
Als je je trouwens druk gaat maken over de opmaak van de html code die ASP.NET voor jou maakt dan ga je een moeilijke tijd tegemoet.
Betreft je laatste opmerking: I know, dat heb ik al een beetje ondervonden, maar toch wil ik dat zoveel mogelijk in de hand houden zodat het makkelijker te lezen is.

Heb even gegoogled naar ASP.NET literal maar zie nog niet echt hoe ik dat kan gebruiken, het moet namelijk komen in mijn code gedeelte en niet via een ASP.NET control.
Kan je een voorzetje geven hoe die code eruit zal zien ongeveer? :?

Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 14-09 14:01
gorgi_19 schreef op dinsdag 13 oktober 2009 @ 08:49:
Als je perse ook de gegenereerde HTML goed wilt hebben icm codebehind, kan je ook eigne controls maken op basic van .ascx (al dan niet door die .ascx alleen als template te gebruiken en dus min of meer als 'subcontrol' van de control)
Goeie tip, bedankt! Ga ik naar kijken.
Is er zonder dit te doen een makkelijke en snelle oplossing op een linebreak toe te voegen aan m'n HTML?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Urk schreef op dinsdag 13 oktober 2009 @ 12:44:
Een groot nadeel van ASP.NET heb ik al wel gevonden, namelijk het genereren van irritante ID's en name's op HTML elementen, zoals ctl00$ContentPlaceHolder1$test en dat je dat niet eens ergens uit kan zetten, opzich prima maar niet als je zelf verstand hebt van wat je doet. Dit uitzetten kan blijkbaar pas vanaf .NET framework 4.0.
Die heeft ASP.Net nodig voor z'n controlstate. Als je ze clientside wilt gebruiken, moet je eens kijken naar de ClientId-property of, bij Labels, de AssociateControlId.
Urk schreef op dinsdag 13 oktober 2009 @ 12:48:
Heb even gegoogled naar ASP.NET literal maar zie nog niet echt hoe ik dat kan gebruiken, het moet namelijk komen in mijn code gedeelte en niet via een ASP.NET control.
Kan je een voorzetje geven hoe die code eruit zal zien ongeveer? :?
Visual Basic .NET:
1
Me.Controls.Add(New LiteralControl(Environment.NewLine))

[ Voor 26% gewijzigd door gorgi_19 op 13-10-2009 12:59 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 14-09 14:01
Verwijderd schreef op dinsdag 13 oktober 2009 @ 09:12:
[...]


Daar heb je deels wel gelijk in, in die zin dat je het wel of niet tonen van bepaalde html zou kunnen sturen vanuit de code behind. Dit zou de TS wel helpen, de line breaks kunnen dan gewoon in html in een panel genest worden.

Helaas is, bij mijn weten, dit niet altijd op deze manier te implementeren, wat als je dynamisch een structuur wilt implementeren mbv een bulleted list en styling die zorgt voor het 'uitschuiven'? Dan kun je er niet aan ontkomen om die bulleted list in de code behind op te bouwen en te koppelen aan de webpagina.

Als je echt gebeurtenissen en html, of control en view resp., wilt scheiden dan zou je voor een pure MVC moeten gaan. Dat wordt inmiddels ook ondersteund door de ASP.NET.

En zoals eerder opgemerkt, ASP.NET genereert zelf ook een bak ellende waardoor je m.i. nooit W3C strict html als resultaat kunt krijgen.
Ja, ik dacht ook dat ik tegen iets aanliep waardoor het niet met web controls kon. Ik had inderdaad al wat over MVC gelezen en dat je daarmee volledige controle (naar zeggen bij MS) hebt over je HTML (perfect voor mij).

Ik heb al een aantal .NET controls geskipt omdat ik de HTML wat deze uitspuugt een drama vindt.

Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 14-09 14:01
gorgi_19 schreef op dinsdag 13 oktober 2009 @ 10:43:
[...]

Heb je de keus? Pak dan gelijk MVC :) Viewstate ga je niet aan ontkomen in webforms :)
Maar je kan viewstate gelukkig wel uitzetten :)

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Urk schreef op dinsdag 13 oktober 2009 @ 13:05:
[...]

Maar je kan viewstate gelukkig wel uitzetten :)
Blijft nog steeds de controlstate over. Het wordt wel kleiner, maar je behoudt nog steeds eea, afaik. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 14-09 14:01
gorgi_19 schreef op dinsdag 13 oktober 2009 @ 12:58:
[...]
Die heeft ASP.Net nodig voor z'n controlstate. Als je ze clientside wilt gebruiken, moet je eens kijken naar de ClientId-property of, bij Labels, de AssociateControlId.
[...]
Ik snap 'm (denk ik), ClientID geeft de ID terug die ASP.NET dus toekent aan je control? Echter kan je daar weinig mee in externe JS files, right?
gorgi_19 schreef op dinsdag 13 oktober 2009 @ 12:58:
Visual Basic .NET:
1
Me.Controls.Add(New LiteralControl(Environment.NewLine))
Super! _/-\o_
Dit heeft het probleem opgelost:
C#:
1
result.Controls.Add(new LiteralControl(Environment.NewLine));

Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 17-09 20:37

BM

Moderator Spielerij
Urk schreef op dinsdag 13 oktober 2009 @ 13:24:
[...]

Ik snap 'm (denk ik), ClientID geeft de ID terug die ASP.NET dus toekent aan je control? Echter kan je daar weinig mee in externe JS files, right?
In externe javascript files heb je er niet veel aan, tenzij je dat ClientID als property meegeeft aan de methods die hem gebruiken. Voor inline javascript is het wel erg handig :)

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Urk schreef op dinsdag 13 oktober 2009 @ 12:44:
[...]
...
Als laatste zie ik trouwens niet wat master pages te maken hebben met het dynamisch genereren van HTML elementen, or do I see that wrong?
...
De opmerking over master pages was meer over content in het algemeen. Als je pagina's dezelfde layout vertonen, dan kun je een deel ervan naar een master page verplaatsen. Ik moest een beetje gokken wat je werkelijke probleem was uit de context die je gaf, dus ik wilde het concept van master pages op je radar brengen. :)

Acties:
  • 0 Henk 'm!

Verwijderd

Grijze Vos schreef op dinsdag 13 oktober 2009 @ 12:34:
[...]

Excuse me? Dat is schromelijk overdreven. Net even gecheckt met een van de sites die wij hebben gemaakt, 1 warning in transitional, en 2 warnings en 1 error in strict (we gebruiken transitional overigens).
Ik kan het nu even helaas niet testen, maar een website die ik een aantal jaren geleden heb gemaakt kwam totaal niet door de W3C validator heen, iets in de orde van 30 errrors en daarbij gebruikte ik gewoon componenten uit het framework. Zoals ik eerder al opmerkte is mijn ASP.NET webapplicatie kennis weggezakt en stamt nog uit de tijd van 1.1, ik heb begrepen dat er al een hoop mogelijkheden zijn om te tweaken met de gerenderde html, door bijvoorbeeld control adapters te gebruiken.

Verder heb ik begrepen dat dus niet meer perse html in mijn code behind te knallen, omdat je met Repeater ook html elementen kunt herhalen.

In mijn huidige webproject ga ik dit allemaal gebruiken en nog eens door de validator halen.

Maar dan vraag ik me hoe dan ook toch af hoe jullie dergelijke nette html gegenereerd krijgen?
Urk schreef op dinsdag 13 oktober 2009 @ 12:59:
[...]


Ja, ik dacht ook dat ik tegen iets aanliep waardoor het niet met web controls kon. Ik had inderdaad al wat over MVC gelezen en dat je daarmee volledige controle (naar zeggen bij MS) hebt over je HTML (perfect voor mij).

Ik heb al een aantal .NET controls geskipt omdat ik de HTML wat deze uitspuugt een drama vindt.
Mijn opmerking over die bulleted list zou dus opgelost zijn door een Repeater te gebruiken, dan kun je dus ook je html en code flink scheiden. Ik heb wat met MVC geknutseld, niet met ASP.NET MVC overigens maar via Monorail (Castleproject) en dat beviel me goed. Als nadeel ondervond ik wel het gebrek aan drag en drop van componenten en dat je daardoor dus weer veel html zelf moet kloppen. Ik heb begrepen uit een tutorial van ASP.NET MVC dat je ook iets van drag en drop kunt gebruiken in je html view.

EDIT:

Net even die website waar ik het over had kunnen valideren:

Errors found while checking this document as HTML 4.0 Transitional!
Result: 25 Errors, 4 warning(s)

:o

[ Voor 4% gewijzigd door Verwijderd op 14-10-2009 09:05 . Reden: W3C validator resultaten ]

Pagina: 1