Avatar billede Tobyyyy Nybegynder
17. oktober 2011 - 10:44 Der er 14 kommentarer og
1 løsning

Asp Updatepanel + Enter Keypress In TextBox --> Trigger Button Outside Panel

Hej

Mit problem består i at jeg har et panel, hvor jeg har sat min default button til Opret buttonen. Derinde i har jeg updatepanels for hver tekstboks, hvor jeg har asyncpostbackstriggers for textchanged for hver, så jeg tjekker løbende om de indtastede oplysninger er lovlige.

Mit problem ligger så i at når jeg står i hvilken, som helst tekst boks skal jeg kunne trykke enter og den skal kører codebehinded der ligger bag. Det virker fint hvis jeg selv klikker på knappen, men hvis jeg trykker enter forbliver den i tekstboksen, selvom jeg kan se knappen har fokus.

Her er et billede, for at danne et bedre overblik:
http://img705.imageshack.us/img705/599/opretbruger.jpg

Havde ikke til at starte med min buttons i et updatepanel, men det har jeg også prøvet nu med fullpostbacktrigger - men det hjælper heller ikke noget.

Her er koden for min .aspx fil:
http://pastebin.com/qvhiRGWP
Avatar billede jokkejensen Novice
17. oktober 2011 - 11:30 #1
ehm du kender til

asp.net's valideringscontroller ? hvis du sætter dem til display=dynamic, så skal du ikke have et update panel omkring en form for at validere løbende, det sker automatisk.

Det er noget uhyggeligt kode du poster der.

Skulle brugeren ikke have JS, validere du .net valideringskontrollerne med Page.IsValid, eller ControlID.IsValid()

/J
Avatar billede jokkejensen Novice
17. oktober 2011 - 11:34 #2
sig til hvis du skal bruge et hurtigt eksempel, på hvordan jeg ville validere formen.

/J
Avatar billede Tobyyyy Nybegynder
17. oktober 2011 - 12:08 #3
Hej jokke, nej jeg kender ikke til asp.net's valideringscontroller. Ville være rigtig fedt, hvis du gad at vise et lille eksempel på hvordan du ville gøre det. (Kan lige prøve at google og kigge lidt på det i mellem tiden)
Avatar billede Tobyyyy Nybegynder
17. oktober 2011 - 12:17 #4
Men kommer jeg ikke til at rende ind i problemet, med at der bliver lavet postback for hele siden så?. Altså hver gang en tekstboks skal tjekkes, at der så sker et fuldt postback? Jeg vil nemlig gerne lave tjekke med codebehind, med c# da jeg skal finde ting frem fra en database og validere efter.
Avatar billede jokkejensen Novice
17. oktober 2011 - 13:09 #5
Nej så skal du ud i noget der hedder customvalidator:

Det skrider desværre over min forstand, udover clientscriptet (jeg er frontend udvikler)

http://msdn.microsoft.com/en-us/library/9eee01cx(v=vs.71).aspx

Men ex for navn:

<fieldset>
    <label for="<%# navn.ClientID %>">Navn:</label>
    <asp:textbox runat="server" id="navn" />
    <div>
    <asp:RequiredFieldValidator runat="server" Display="Dynamic" ControlToValidate="navn" ErrorMessage="Du skal udfylde dit navn"></asp:RequiredFieldValidator>
    <asp:RegularExpressionValidator ErrorMessage="Ugyldigt navn" ValidationExpression="^([a-zA-Z '-]+)$" Display="dynamic" runat="server" ControlToValidate="navn"></asp:RegularExpressionValidator>
    </div>
    </fieldset>


husk en Page.DataBind for at navn.ClientID bliver afviklet .

/J
Avatar billede Tobyyyy Nybegynder
17. oktober 2011 - 13:41 #6
Kan godt se det er smart, men nu vil jeg som sagt helst lave det backend (har allerede alle metoderne der, så det er lettere også).

Er det så slemt at have alle de updatepanels, som jeg har lavet da ? :)

Det fungerer ellers fint, bare lige udover at når man trykker på enter tasten i en tekstboks, at den ikke opfører sig ligesom man klikker på opret knappen.
Avatar billede jokkejensen Novice
17. oktober 2011 - 13:55 #7
naaa, men prøv at åbne "fiddler2.com"/firebug/ie webdeveloper toolbar under network, og prøv at se alle de request din server får når folk taster i felterne..

Siger vi at felterne i gns har 10 tegn (nok nærmere 15-20), så skal der 100 request til serveren for at validere.. Det syntes jeg er lidt i overkanten.
Avatar billede jokkejensen Novice
17. oktober 2011 - 13:57 #8
altså asp:updatepanel har slet ikke en property der hedder defaultbutton

pak hele formen ind i en

<asp:panel runat="server" defaultbutton="idpåkanp">

//alt dit andet kode

</asp:panel>
Avatar billede jokkejensen Novice
17. oktober 2011 - 13:58 #9
how, ikke hele <asp:formen> men herefter.

/J
Avatar billede Tobyyyy Nybegynder
17. oktober 2011 - 14:20 #10
Har også pakket det hele ind i et asp:panel, sådan ser der ud i koden:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Panel ID="defaultPanel" runat="server" DefaultButton="ButtonOpret">

Har dog slettet <div> nu, da at der jo er pakket ind i et panel.

Mit problem er at jeg kan se fokusset er på Opret knappen, men når jeg trykker på Enter knappen i en af tekstboksene, så forsvinder fokusset fra Opret knappen og der sker ikke noget. Fokusset kommer igen på knappen når jeg begynder at skrive i tekstboksene.
Avatar billede Tobyyyy Nybegynder
17. oktober 2011 - 15:39 #11
Men hvis jeg tabber helt ned på knappen og trykker enter, så virker det fint. Så det må have noget med de updatepanels at gøre :)
Avatar billede Tobyyyy Nybegynder
18. oktober 2011 - 10:08 #12
Tror faktisk det er fordi tekstboksene er autopostback = true. Så forbliver enter key presset der.
Avatar billede Tobyyyy Nybegynder
18. oktober 2011 - 10:13 #13
Når jeg trykker enter ryger cursoren til første plads før teksten i tekstboxen i explorer og firefox, i chrome der bliver teksten i tekstboksen markeret.
Avatar billede Tobyyyy Nybegynder
18. oktober 2011 - 13:17 #14
Ved ikke hvorfor det ikke virker, men havde også prøvet at sætte javascripts ind for at prøve at få det til at virke. Men jeg havde lige glemt at asp.net ændre id'et, så det var derfor virkede de ikke dengang.
Tilføjer bare dette til hver tekstboks:
onkeydown="if (event.keyCode == 13) document.getElementById('MainContent_ButtonOpret').click()"
Avatar billede Tobyyyy Nybegynder
18. oktober 2011 - 13:27 #15
Jeg lukker den bare her så :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester