Toon posts:

[asp.net] serverside form - hoe te gebruiken?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Op dit moment sta ik in de ontwerpfase van wat een middelgrote (maar hopelijk drukgezochte) site gaat worden.

Ik stap op dit moment over op ASP.NET en daarbij stuit ik op wat vragen.

Om gebruik te kunnen maken van de tot nu toe prettig werkende ASP-controls/ServerControls heb je zeer vaak een serverside form nodig.

Is het verstandig om het server-side form al terug te laten komen in het altijd terugkerende design, zodat je altijd zo'n form ter beschikking hebt, en je viewstate netjes werkt, of kan je op problemen stuiten omdat je nog een additioneel form nog kunt hebben?

Op MSDN en de .NET SDK staan als definitie van het serverside form:
code:
1
2
3
4
5
6
<form id="programmaticID"
      method=POST | GET
      action="srcpageURL"
      runat="server" >
   Other controls, input forms, and so on.
</form>

Als je echter een serverside form geruikt, waarin je nog een normaal form zet levert dit een rare situatie op in je html, waardoor eventuele data na je 'normale' form niet verzonden wordt (ten minste in IE).

voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<form
    id="mainform"
    runat="server">
    <asp:textbox
        id="textbox1"
        runat="server"
        />
    <asp:button
        id="btndotnetbutton"
        runat="server"
        text="submit"
        />
    <br/>
    <form name="normalform">
        <input type="text">
        <input type="submit" value="submit">
    </form>
    <asp:textbox
        id="textbox2"
        runat="server"
        />
    <asp:button
        id="btndotnetbutton2"
        runat="server"
        text="submit"
        />
</form>

levert clientside op:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<form name="mainform" method="post" action="forminform.aspx" id="mainform">
<input type="hidden" name="__VIEWSTATE" value="**viewstatevariabele**" />
    <input name="textbox1" type="text" value="safsafasfa" id="textbox1" />
    <input type="submit" name="btndotnetbutton" value="submit" id="btndotnetbutton" />
    <br/>
    <form name="normalform">
        <input type="text">
        <input type="submit" value="submit">
    </form>
    <input name="textbox2" type="text" id="textbox2" />
    <input type="submit" name="btndotnetbutton2" value="submit" id="btndotnetbutton2" />
</form>

Hierbij wordt door de sluit-tag van het nested form (wat sowieso niet goed gaat volgens mij) beide formulieren afgesloten, waardoor dat deel niet meer werkt.

Dit hoeft dus geen probleem te zijn, als je altijd als enige formulier op je pagina het server-side form gebruikt. (Of mis ik nu ergens een basis pricipe wat betreft forms 8)7 ?)

Heeft iemand al ervaring met voetangels en -klemmen met betrekking op het serverside form?

  • Capa
  • Registratie: November 2002
  • Laatst online: 26-08 09:34
ze lopen hier onjuist in elkaar over:

<form name="normalform">
<input type="text">
<input type="submit" value="submit">
</form>
<asp:textbox
id="textbox2"
runat="server"
/>
<asp:button
id="btndotnetbutton2"
runat="server"
text="submit"
/>
</form>

je hebt de 1 nog niet afgesloten, of je opent de ander al weer, dit gaat dan altijd fout. ik weet niet of ik het helemaal begrijp, maar zorg dat je ze netjes afsluit
<form name="1e form en zo">form shit hier....</form>

<form name="2e form enzo">ander form shit hier....</form>

Verwijderd

Topicstarter
Als je in de bovengenoemde definitie van de SDK (Microsoft's .NET software developent kit, sectie reference>asp.net syntax>HTMLServerControls) kijkt, suggereert ie dat er wel nested form mogelijk zouden moeten zijn.

Even voor de goede orde:
Ik heb het dit moment over de combinatie van een serverside en een 'clientside' form op de aspx pagina.

Verwijderd

Ik vind het sowieso niet aan te raden om server-side controls/forms te combineren met traditionele HTML controls. Forms nesten is ook al niet een erg prettig idee. Als ik jou was zou ik me eerst goed inleren op ASP.Net voordat je er een project mee doet. Pas dan kan je de kracht van ASP.Net goed gebruiken.

HTH :)

Verwijderd

Topicstarter
Nee, forms nesten is wat mij betreft ook uit den boze.....vooral omdat het niet mogelijk is :P

Ook ben ik niet van plan traditionele controls/tags te gaan gebruiken binnen het serverside form.
Maar op dit moment probeer ik dus vooruit te kijken. Als we ik een soort van template ga maken waarop ik elke pagina baseer en ik kom er achteraf achter dat ik iets niet kan oplossen binnen zo'n form, heb ik een....uitdaging, en een berg overwerk.

daarom vroeg ik me dus af of er iets tegen is om binnen elke pagina die ik heb hetzelfde serverside form te gebruiken.

En wat betreft dat inleren....doe ik doe ik, maar ik dacht vraagje kan geen kwaad.
Ik ben iig niet van plan wat hersenloos aan te kl*ten......niet te veel dan.

Verwijderd

Als je een form als terugkerend element in allerlei pagina's wil gebruiken (bijv. een login-form), kan je een user control maken, en deze in andere pagina's opnemen. Ik weet echter niet zeker of je dat bedoelt. Misschien kun je een voorbeeld geven ...

Verwijderd

Topicstarter
inderdaad, zoiets moet het worden. Bij voorbeeld moet op elke pagina een loginform gedeelte beschikbaar zijn.
Het leek me inderdaad wel slordig als bij de loginprocedure door middel van hetzelfde form gedaan moet worden als bij voorbeeld een form-upload.
Als je een login user-control hebt (wat uiteindelijk toch een form zal opleveren in je html-code) blijft, kun je er dan iets aan doen om te zorgen dat je viewstate van je andere form intact blijft?

  • Capa
  • Registratie: November 2002
  • Laatst online: 26-08 09:34
je kan is asp wel 1 standaard form verwerk functie maken
het enige wat je dan moet doen op alle losse pagina's maken is de form velden maken en JUIST benamen

  • Capa
  • Registratie: November 2002
  • Laatst online: 26-08 09:34
bij nader inzien kan je bijna alles verwerken in 1 standaard pagina. ik zit nu op me stage adres, daar programmeer ik in VB6 InterDev. Ik heb het ff getest, en hier werkt het. Ik wil je wel help de code te schrijven, mail en/of add me op msn @ jim_the1st@hotmail.com

Verwijderd

Topicstarter
Je precies, daar zat ik aan te denken, een strakke, gestructureerd benaming van alle id's van de form-elementen, zo zou ik alles binnen 1 form kunnen houden, right. Hierbij moet ik ervoor zorgen dat de validatie en gewoon gebruik van de form-spul in dezelfde include worden gedefinieerd als waar het formulier gedeelte wordt aangemaakt.

(op dit moment zit ik in O'Reilly hoofdstuk Custom and User Controls, om zo jouw suggestie uit te pluizen)

  • Capa
  • Registratie: November 2002
  • Laatst online: 26-08 09:34
gewoon een pagina met functies schrijven, zoals ik al zei, ik wil je daarbij wel helpen hoor

Verwijderd

Mijns inziens zou viewstate gewoon behouden moeten blijven (zonder extra code). Doe de pepsi-test: zet formulieren naast elkaar (dus niet genest) op 1 pagina, en submit eens de eerste, daarna de tweede, en kijk op de viewstate van de eerste voor zover die niet door de tweede wordt aangepast behouden blijft ...

Edit:
Ga niet 1 algemene form afhandelingsfunctie schrijven, want dat wordt gewoon spagetticode, en naarmate je app groeit en wijzigt, wordt dit alleen maar erger ...

[ Voor 25% gewijzigd door Verwijderd op 12-12-2002 17:06 ]


Verwijderd

Topicstarter
Ik was inderdaad niet van plan 1 afhandelingsfunctie te schrijven, raak je alleen maar in de war als je aaaal je formdata van al je pagina's op 1 plaats moet behandelen. Zoals ik al in m'n vorige post schreef zal ik die data op de dezelfde include behandelen als waar ik de control heb aangemaakt.

Wat de Pepsi test betreft: You've got the right one baby...uh-huh!
(net als je viewstate bewaard blijft als je alleen je url weer intypt, al weet ik niet of dat typisch is voor uplevel browsers)

Allebei bedankt voor jullie hulp...ik zal ook de optie van de usercontrol nog onder de loep nemen..

maar nu ga ik rennen voor de trein...later meer!

[edit: typo]

[ Voor 3% gewijzigd door Verwijderd op 12-12-2002 17:27 ]


Verwijderd

Het mooie aan een user control is dat je de afhandeling daarvan gewoon in de 'code behind' file kan zetten, zodat je helemaal geen code hoeft te zetten in de pagina waarin je de user control toepast.

Verwijderd

Topicstarter
Sorry dat ik dit topic nog omhoog schop, maar ik moet nog even iets corrigeren. Helaas de afgelopen dagen niet de tijd voor genomen.
Het resultaat van de 'pepsi-test', zoals hierboven genoemd, klopte helaas niet; post je een apart form dan je server-side form, dan verlies je gewoon je viewstate.

in de SDK leggen ze inderdaad ook uit over een usercontrol dat je de control in een serverside-form moet plaatsen, maar ze wel duidelijk moet scheiden (form-tag en restvan control). Ook geeft de SDK aan dat je meerdere usercontrols kunt gebruiken binnen 1 form.

Zo kun je in het voorgenoemde geval dus 1 serverside form gebruiken, dat je voortaan overal voor gebruikt.

zie voor meer info:
MSDN:Including a User Control in a Web Forms Page

[ Voor 16% gewijzigd door Verwijderd op 16-12-2002 11:03 ]

Pagina: 1