27. juli 2002 - 11:28Der er
25 kommentarer og 2 løsninger
Problem med form PostBack
Hej alle.
Jeg har lavet en CustomValidator i min form, som tjekker om et givent brugernavn er ledigt. Siden formen ligger i, er en include fil, som bliver inkluderet i default.asp som ligger i en anden mappe end include filen. Problemet er at formen ikke submitter til default filen, men derimod til include filen selv. Det resulterer jo i at jeg kun får vist include filen, uden indholdet i default filen. Så hvordan får jeg formen til ikke at poste til selve siden den ligger i, men til den URL den er på?
Smid følgende i toppen af din include-fil, og omdøb den til minkontrol.ascx <%@ Import Namespace="System.Data" %> <%@ Control Language="VB" %>
Herefter tilføjer du i toppen af din default.aspx følgende: <%@ Register TagPrefix="orca" TagName="minForm" src='minkontrol.ascx' %>
Når du så vil indsætte din form blandt html-koden skriver du blot: <orca:minForm ID="MyCustomValidator" runat="server" />
Hvis du tilføjer public variabler i din kontrol i en kode-sektion (præcis som i aspx-sider), kan du sætte deres værdi fra dit tag. f.eks. <orca:minForm minVariabel=FALSE ID="MyCustomValidator" runat="server" />
Dette er dog en lidt ekstra simpel metode som f.eks. ikke husker state (selvfølgelig medmindre værdien er hardcodet i tag'et som i ovenstående eksempel). Jeg bruger det dog ofte når jeg lige nemt skal kunne f.eks. tænde/slukke for en knap, eller ændre en tekst/farve.
Tak for svarene, nu fik jeg smidt formen i en user control, men problemet er her stadig.
Siden der indeholder kontrollen tilgås vha denne url: http://localhost/?Content=users/create - Her inkluderer default.aspx filen create.aspx i mappen users.
Når så jeg poster min form (nu i kontrollen improve:CreateUserForm) så loader den siden http://localhost/content/users/create.aspx?Content=users/create - Altså bliver den ikke loadet i default.aspx, og derfor ser den jo helt forkert ud. Altså er mit problem ikke løst.
så må du have hardcodet navnet create.aspx. Der er jo ikke nogen fil der hedder create.aspx mere, så hvor skulle serveren kende denne fil fra? Din kontrol skulle jo nu gerne hedde create.ascx (usercontrols skal have efternavnet ascx)
Jeg kan ikke lave create.aspx som en user kontrol pga opbygningen af mit site. Default.aspx _skal_ loade en aspx side. Derfor lavede jeg en aspx side som loadede kontrollen, men det var vist ikke godt nok :)
aspx-sider renderer jo en postback tilbage til sig selv. Dette går galt når du inkluderer den i en anden. Derfor bruger du usercontrols. Jeg har svært ved at se hvorfor du ikke bare kan benytte ctrl_create.ascx direkte ind i din default.aspx side. Det du forsøger kan jo tilsyneladende ikke lade sig gøre, hvorfor du måske skal tænke i retning af en mere fleksibel løsning.
Dette er den vigtigste del af min default.aspx side:
If Len(Request("Content")) > 0 Then If Right(Request("Content"), 1) <> "/" Then Server.Execute("content/" & Request("Content") & ".aspx") Else Server.Execute("content/" & Request("Content") & "default.aspx") End If Else Server.Execute("content/default.aspx") End If
Jeg tror det forklarer hvorfor jeg ikke kan loade user control'en direkte... Jeg må tænke lidt over hvordan jeg kan løse det...
odegaard -> Det bliver et problem når jeg har over 50 sider (og antallet stiger) som skal kunne inkluderes. Det ender jo med en gigantisk if sætning, som jeg ikke ønsker.
moonduck -> Ud fra dit råd kan jeg vel lave en User Control som tager en enkelt parameter. Denne User Control inkluderer så den fil den har fået som parameter. På den måde vil mine filer stadig blive inkluderet, men i User Control'en, det bør vel løse problemet?
>Hvis du importerer filer med forretningslogik ved hjæp ah en >parameter fra bruger (Request objektet) er din applikation "tænkt" >forkert. Hvad lægger du i "filer med forretningslogik"?
Filer der udfører noget, hvis det blot var ren HTML/tekst der var i filerne ville du aldrig have løbet ind i problemet. Men du har tilsyneladende lagt noget ASP.NET kode i include filen, og det er ikke så smart.
Fordelen ved .NET er netop den klare opdeling af logik og præsentation.
Hvis du blot inkluderer filerne fra Controllen vil de jo stadig poste til sig selv. Kan vi evt. få lov til at se indholdet af en af de filer problemet er med?
>Jeg besluttede mig for at slippe af med problemerne og lave siden >i et popup vindue i stedet (som faktisk er blevet federe end før :)). Sådan går det faktisk godt og vel altid, når man beslutter sig for at droppe første indskydelse, og tænker alternativt. Tillykke med "det fede" og takker for pointene.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.