Jag har byggt min applikation i flerlagerstruktur. Det går bra att lägga in nya inlägg i forumet, men det blir problem när jag svara på ett inlägg. När jag klickar på ett inlägg så änvänder jag mig av QueryString och visar sedan inlägget i en användarkontroll. Vet inte hur mycket kod jag måste visa för att ni ska förstå. Men jag ska försöka vara så kort som möjligt: Är det nån som föstår vad jag menar och orkar svara? Vet inte riktigt vad det är du är ute efter, en tankegång eller kod? Det har väl ingen betydelse om jag använder användarkontroller eller repeater, problemet är ju fortfarande att jag måste knyta rätt id från forumet när jag lägger in svar. Det som gör att jag inte vet hur jag riktigt ska lösa det är pga av att jag använder en affärsklass där jag har alla funktioner för forumet. För jag får ju id:et från forumet i quarystringen när jag klickar på ett inlägg, men jag vet inte hur jag ska hämta in det i affärsklassen där funktionen finns för att lägga till ett nytt inlägg. För att hålla reda på svar till ett inlägg är det enklast att hålla startinläggen i en tabell och svaren i en annan, med liknande struktur + ett fält för id:t på inlägget som svaret tillhör. Har gjort det så att har en sida där alla inlägg visas i en datagrid (forum.aspx), när jag klickar på ett inlägg så visas inlägget på en annan sida (trad.aspx). Jag visar inlägget i en lable som jag har kopplat till en användarkontroll. Svars inläggen kommer jag visa i en repeater. Som jag skrev så får jag id:et från quarystringen, men eftersom jag använder en affärsklass där jag har funktionen för att svara på ett inlägg, har även funktionen där för att fylla datagriden (fungerar bra), men jag vet inte hur jag ska hämta id:et från trad.aspx.vb till min affärsklass. Visar koden här:Knyta svaret till rätt inlägg i ett forum
Klickbara rubriken i forumet
" class=m><%#Databinder.Eval(Container.DataItem, "forum_trad")%>
Som jag sedan visas i trad.aspx
Dim trad As jonas.myForumCls = New jonas.myForumCls
Dim ds As DataSet = New DataSet
Dim apa As String = Request.QueryString.Item("trad")
Try
ds = trad.GetTrad(apa)
trad = Nothing
Dim tid As String = DateTime.Now.ToString("d")
Dim i As Integer = 0
While i < ds.Tables(0).Rows.Count
Dim trad1 As trad1 = Page.LoadControl("trad.ascx")
trad1.namn = ds.Tables(0).Rows(i)(1)
trad1.mail = ds.Tables(0).Rows(i)(2)
trad1.trad = ds.Tables(0).Rows(i)(3)
trad1.comment = DecodeText(ds.Tables(0).Rows(i)(4))
trad1.tid = ds.Tables(0).Rows(i)(5)
Label2.Controls.Add(trad1)
i = i + 1
End While
och det är här problemet kommer när jag ska knyta id:et från inlägget så att svaret knyts till rätt id för inlägget. Så här ser insert strängen ut i affärsklassen:
# Lägg till svar i forumet ##
Function AddAnswer(ByVal tb_namn As String, ByVal tb_mail As String, ByVal tb_trad As String, ByVal tb_text As String, ByVal tid As String, ByVal ClientIP As String)
Dim strSQL As String = "INSERT INTO forum_svar" & _
"(forumsvar_namn, forumsvar_mail, forumsvar_trad, forumsvar_text, forumsvar_tid, forumsvar_ip) VALUES (" & _
"'" & CheckUserInput(tb_namn) & "', " & _
"'" & CheckUserInput(tb_mail) & "', " & _
"'" & CheckUserInput(tb_trad) & "', " & _
"'" & CheckUserInput(tb_text) & "', " & _
"'" & CheckUserInput(tid) & "', " & _
"'" & CheckUserInput(ClientIP) & "')"
Return ExecuteNonQuery(strSQL)
'Return strSQL
End Function
Hoppas ni förstår hur jag menar. Tack på förhand!
MVH Jonas Sv: Knyta svaret till rätt inlägg i ett forum
Sv:Knyta svaret till rätt inlägg i ett forum
Pseudokoden skulle kanske kunna vara något liknande:
Loopa igenom alla inlägg och skriv ut med länk för att göra kommentar
Använd id:t för aktuellt inlägg och hämta tillhörande kommentarer och skriv ut dessa
Fortsätt att loopa rekursivt alla kommentarers kommentarer osv.. för varje inlägg skriver du ut det aktuella id:t för just det inlägget/kommentaren.
Att binda ett inlägg till en eller flera kommentarer är ganska enkelt medan det blir lite klurigare om man ska kunna kommentera kommentarer obegränsat i djup och då får man verkligen "hålla tungan i rätt mun.." eller hur det nu var.. ;)Sv: Knyta svaret till rätt inlägg i ett forum
kommer bara att ha det så att knyta ett inlägg till en eller flera kommentarer...Sv:Knyta svaret till rätt inlägg i ett forum
Alternativt för att hålla allt i en tabell kan man ju ha ett boolean fält för att markera om det är ett svar eller inte och fylla id fältet för svaret med samma id som orginalinlägget och samtidigt markera att det är ett svar genom boolean fältet.
Kan man inte påverka strukturen alls för tabellerna får man ge sig till med att leta upp det inlägg/id som kom först i tiden, du hade ett fält för tid som verkar kunna användas för det.Sv: Knyta svaret till rätt inlägg i ett forum
Namespace jonas
Public Class myForumCls
' ## Viktigt, vi skall använda Dataaccessklassen #
Inherits databas
Public DataSource As Integer
'# Hämta alla inlägg i ett DataSet ##
Function GetEntrys() As DataSet
Dim strSQL As String = "SELECT forumID, forum_namn, forum_mail, forum_trad, forum_text, forum_tid, forum_ip, (select count(*) from(forum_svar)where forum_svar.forumsvar_id = forum.forumID)AS antal FROM(forum)ORDER BY forumID"
Return GetNewDataSet(strSQL)
End Function
'# Hämta ett inlägg i ett DataSet ##
Function GetTrad(ByVal ID As Integer) As DataSet
Dim strSQL As String = "SELECT * FROM forum where forumID = " & ID
Return GetNewDataSet(strSQL)
End Function
'# Ta bort inlägg i Guestbook ##
Function DeleteEntry(ByVal datum As Integer)
Dim strSQL As String = "DELETE * from forum WHERE forumID = " & datum
Return ExecuteNonQuery(strSQL)
End Function
'# Lägg till inlägg i forumet ##
Function AddEntry(ByVal tb_namn As String, ByVal tb_mail As String, ByVal tb_trad As String, ByVal tb_text As String, ByVal tid As String, ByVal ClientIP As String)
Dim strSQL As String = "INSERT INTO forum" & _
"(forum_namn, forum_mail, forum_trad, forum_text, forum_tid, forum_ip) VALUES (" & _
"'" & CheckUserInput(tb_namn) & "', " & _
"'" & CheckUserInput(tb_mail) & "', " & _
"'" & CheckUserInput(tb_trad) & "', " & _
"'" & CheckUserInput(tb_text) & "', " & _
"'" & CheckUserInput(tid) & "', " & _
"'" & CheckUserInput(ClientIP) & "')"
Return ExecuteNonQuery(strSQL)
'Return strSQL
End Function
'# Lägg till svar i forumet ##
Function AddAnswer(ByVal tb_namn As String, ByVal tb_mail As String, ByVal tb_trad As String, ByVal tb_text As String, ByVal tid As String, ByVal ClientIP As String)
Dim strSQL As String = "INSERT INTO forum_svar" & _
"(forumsvar_namn, forumsvar_mail, forumsvar_trad, forumsvar_text, forumsvar_tid, forumsvar_ip) VALUES (" & _
"'" & CheckUserInput(tb_namn) & "', " & _
"'" & CheckUserInput(tb_mail) & "', " & _
"'" & CheckUserInput(tb_trad) & "', " & _
"'" & CheckUserInput(tb_text) & "', " & _
"'" & CheckUserInput(tid) & "', " & _
"'" & CheckUserInput(ClientIP) & "')"
Return ExecuteNonQuery(strSQL)
'Return strSQL
End Function
Förmodligen finns det smidigare lösningar på det här, men som jag sa har jag inte hållit på så mycket med asp.net och har gjort så gott jag kunnat...