webForumDet fria alternativet

Paging i gridview postar formulär...

.NET

6 svar · 405 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Hej igen
På en sida som jag har byggt så har jag både ett "formulär" men ett par input-fält och samtidigt en gridview ovanför formuläret.
När jag postar formuläret så läggs en post till som visas i griden.

Men om jag direkt efter använder gridens pagingknappar så postas formuläret igen. Varför?

Medlem sedan okt. 20041 556 inlägg
#2

Är detta jätteknepigt eller?

Medlem sedan mars 20002 836 inlägg
#3

Nej, inte jätteknepigt.

Men, om du använder den inbyggda "pagingen" så postas sidan/formuläret igen för att pagingen använder sig av "postbackdata" så att säga för att kunna visa nästa sida, eller vilken sida man nu valt.

Men, det jag undrar är varför "en ny post" läggs till? Har du inte en speciell "spara knapp" som kör en specifik funktion för att spara datat? Den knappens "OnClick" ska specifiera en funktion som endast körs när data ska läggas till i databasen.

Det jag vill säga är att du INTE ska lägga till en ny post i "Page_Load" eventet genom att kolla om Page.IsPostBack är sant eller inte. Misstänker att det är så och att det därför "läggs till" en ny post.

cya,
/PatrikB

Medlem sedan okt. 20041 556 inlägg
#4

Nej det ligger inte i Page_load, det ligger i en onClick på en knapp till en sub.
default.aspx -sidan:

...Formuläret med två textboxar
<asp:Button ID="Button1" runat="server" OnClick="addComm" Text="Skicka" />

default.aspx.vb -sidan:

    Public Sub addComm(ByVal sender As Object, ByVal e As EventArgs)
        If addComment(TextBox1.Text, TextBox2.Text, Session("loggedin")) Then
            msg.Text = " (Posten tillagd)"
            GridView1.DataBind()
            TextBox1.Text = ""
            TextBox2.Text = ""
            js.Text = "<script type=""text/javascript"">window.onload = function(){setTimeout(""document.getElementById('" + msg.UniqueID.Replace("$", "_").Replace(":", "_") + "').style.display='none'"",3000);};</script>"
        Else
            msg.Text = "Fel!"
        End If
    End Sub

Private Function addComment(ByVal title As String, ByVal body As String, ByVal mid As Integer) As Boolean
            connect("set_thread")
            myCommand.Parameters.Add(New OleDbParameter("@title", OleDbType.VarChar, 100, ParameterDirection.Input))
            myCommand.Parameters("@title").Value = title
            myCommand.Parameters.Add(New OleDbParameter("@body", OleDbType.VarChar, 4000, ParameterDirection.Input))
            myCommand.Parameters("@body").Value = body
            myCommand.Parameters.Add(New OleDbParameter("@mid", OleDbType.Integer, 10, ParameterDirection.Input))
            myCommand.Parameters("@mid").Value = Convert.ToInt32(mid)
            Try
                myConnection.Open()
                myCommand.ExecuteNonQuery()
                Return True
            Catch ex As OleDbException
                Return False
            Finally
                myConnection.Close()
            End Try
            Return False
        End Function

'... Fler funktioner ...
Medlem sedan dec. 19996 721 inlägg
#5

Lägg in lite breakpoints eller traceutskrifter, så att du ser var "sidan tar vägen". Jag tycker t.ex. att det är lite konstigt att du verkar återanvända ett OleDbCommand.

Medlem sedan okt. 20041 556 inlägg
#6

Ok, om jag lägger till trace.write lite här och var så ser jag att forumläret postas inte om.
Däremot så verkar detta köras av ngn anledning:

msg.Text = " (Posten tillagd)"
js.Text = "<script type=""text/javascript"">window.onload = function(){setTimeout(""document.getElementById('" + msg.UniqueID.Replace("$", "_").Replace(":", "_") + "').style.display='none'"",3000);};</script>"
Medlem sedan okt. 20041 556 inlägg
#7

Det funkade om jag i Page_Load tömde dessa fält:

msg.Text = ""
js.Text = ""
278 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
155 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)