Avatar billede voller Nybegynder
14. marts 2004 - 10:59 Der er 9 kommentarer og
1 løsning

To funktioner i en form?

Hej eksperter.



Jeg er ved at lave en ASP.NET applikation som et hobbyprojekt. På en af siderne i denne applikation vil jeg give slutbrugeren mulighed for at vurdere et givet billede eller efterlade en kommentar til billedet.

Problemet er, at man kun kan have en "serverside-form" på min ASP.NET-side. Altså skal de to forskellige funktionaliteter indbygges i samme form. Det kan jeg ikke klare.

For at efterlade en kommentar har jeg et par ASP.NET tekstbokse med tilhørende validatore og en "Efterlad kommentar" knap. For at give en vurdering har jeg lavet fem ASP-NET knapper, rangerer fra et til fem points.

Det er sådan set godt nok, men hvordan kan jeg finde ud af, hvad det er brugeren trykker på? Trykker brugeren på en af de fem vurderings-knapper eller trykker brugeren på "Efterlad kommentar" knappen? Der skal jo gøres forskellige ting, afhængigt af hvad brugeren har trykket på.

Jeg efterlyser noget i denne stil:
If Page.IsPostBack Then
    If "Brugeren har trykket på en vurderingsknap" Then
        Call InsertRating
    Else
        Page.Validate
        If Page.IsValid Then
            Call InsertComment
        End If
    End If
End If

Hjælp?
Avatar billede nielsbrinch Nybegynder
14. marts 2004 - 11:23 #1
Hvis du vil gøre det på den måde, kan du sætte en boolsk variabel til sand, når brugeren tryker på en vurderingsknap.
Avatar billede jakobg Nybegynder
14. marts 2004 - 11:36 #2
Du skal bare lave 5 knapper med hver deres click-event. Jeg kan lave et kode-eksempel til dig, hvis det har interesse?

Bruger du VS.NET?
Avatar billede voller Nybegynder
14. marts 2004 - 12:34 #3
Niels>
Hvordan kan man sætte en boolsk værdi? Det kræver jo, at jeg undersøger hvilken knap der er trykket på, før man sætter værdien, hvilket jo er mit problem: Det ved ikke hvordan man gør.
Og hvordan ville du strukturere koden? Det lyder til du har en anden ide?

Jakob>
Jeg vil rigtigt gerne se lidt kode. Og jeg bruger VS .NET, ja.

Tak for jeres hjælp.
Avatar billede nielsbrinch Nybegynder
14. marts 2004 - 13:06 #4
I din VS.NET designer editor, kan du dobbeltklikke på en knap. Så kommer du ind i koden i en metode der bliver udført når brugeren trykker på knappen. Derinde kan du skrive den kode der skal udføres, når brugeren trykker på knappen.
Avatar billede jakobg Nybegynder
14. marts 2004 - 16:41 #5
Her er koden til en side 6 knapper (AddComment, Button1, Button2, Button3, Button4, Button5) samt et tekstfelt, Textbox1:

Public Class WebForm1
    Inherits System.Web.UI.Page

    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected WithEvents Button2 As System.Web.UI.WebControls.Button
    Protected WithEvents Button3 As System.Web.UI.WebControls.Button
    Protected WithEvents Button4 As System.Web.UI.WebControls.Button
    Protected WithEvents Button5 As System.Web.UI.WebControls.Button
    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
    Protected WithEvents AddComment As System.Web.UI.WebControls.Button

    Private Sub InsertComment()
        ' TextBox1.Text har kommentaren...
    End Sub

    Private Sub InsertRating(ByVal Rating As Integer)
        ' ...
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call InsertRating(1)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Call InsertRating(2)
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Call InsertRating(3)
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Call InsertRating(4)
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Call InsertRating(5)
    End Sub

    Private Sub AddComment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddComment.Click
        Call InsertComment()
    End Sub
End Class

Der er naturligvis mange andre, mere elegante, måder at gøre det på.
Som nielsbrinch pointerer, så er det faktisk bare et spørgsmål om at trække knapperne ind på formen, og så derefter dobbeltklikke dem. Så springer du automatisk til den event, der bliver udløst, når knappen bliver klikket i browseren.
Faktisk behøver du slet ikke gøre noget Page_Load sub'en.

Var det svar nok? :)
Avatar billede voller Nybegynder
14. marts 2004 - 20:31 #6
Jeg kender godt ideen med at oprette en event-handler til hver knap. Det jeg ikke bryder mig om ved det koncept, er at de ændringer som event-handleren laver i databasen først bliver synlige for slutbrugeren efter siden er blevet refresh'et.

Hvis brugeren f.eks. indsætter en kommentar til et bestemt billede, så kan brugeren ikke se denne kommentar på siden, før brugeren har forladt siden og er gået ind på den igen. Det hænger, så vidt jeg ved, sammen med at kommentaren først bliver sat ind efter Page_Load er blevet udført.

Kan man tvinge sådan en event-handler til at blive affyret før Page_Load?
Avatar billede nielsbrinch Nybegynder
14. marts 2004 - 21:01 #7
Nej. Rækkefølgen af dine events, er så vidt jeg ved, ikke noget du kan ændre på.

Men du kan da bare udføre det hele i Page_Load, ligesom du først selv foreslog, kan du ikke?
Avatar billede jakobg Nybegynder
14. marts 2004 - 21:10 #8
Du kan kalde en funktion, som viser kommentaren brugeren har indtastet, umiddelbart efter du har kaldt InsertComment? Så behøver du ikke refreshe siden igen?
Avatar billede voller Nybegynder
14. marts 2004 - 23:12 #9
Jakob>
Det kan jeg vel. Det er bare en lidt tung side, så jeg ville gerne undgå de ekstra DB-kald. Men hvis det ikke kan være på anden måde, så... OK.

I skal have tak for hjælpen, begge to.
Avatar billede jakobg Nybegynder
15. marts 2004 - 00:12 #10
Det var så lidt... :)

Hvis det er teksten, som brugeren netop har indtastet, som du ønsker at vise, behøver du ikke et ekstra db-kald? Den ligger jo i tekstfeltet?
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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