14. marts 2004 - 10:59Der 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
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.
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.
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.
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?
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?
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?
Synes godt om
Ny brugerNybegynder
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.