2017-04-10 7 views
0

Ich habe eine Schaltfläche in einer ASP-Seite, auf die ich klicke, um einige Daten auf einem SQL-Server zu speichern. Es funktioniert wie beabsichtigt, außer dass jedes Mal, wenn die Seite neu geladen wird (wenn andere Dinge gemacht werden), die erneute Übermittlung dieser Schaltfläche ausgelöst wird. Das Ergebnis sind doppelte Datensätze in der Datenbank. Ich weiß, dass ich wahrscheinlich für Duplikate validieren könnte, aber meine Sorge ist, dass wenn die Schaltfläche immer noch einen Klick auf jede Aktualisierung auslöst, dass sie Ressourcen ohne Grund verbraucht.Knopfklick hört nicht auf zu triggern

Bei jeder Aktualisierung heißt es: "Um diese Seite anzuzeigen, muss Firefox Informationen senden, die eine zuvor durchgeführte Aktion (wie etwa eine Suche oder eine Auftragsbestätigung) wiederholen."

Ich habe den Rest der Codebehind, HTML und Javascript-Datei für alle Verweise auf button11 gesucht und es gibt keine. Ich bin ratlos, warum es immer wieder auslöst.

Die Schaltfläche HTML:

<asp:Button ID="button11" runat="server" OnClick="Button11_Click" /> 

Codebehind:

protected void Button11_Click(object sender, EventArgs e) 
{ 
    var update = hfptstate.Value; 
    string fname = fnamebox.Text; 
    string lname = lnamebox.Text; 
    string sex = sexbox.Text; 
    string combname = fname + " " + lname; 
    string init = null; 
    string str = combname; 
    str.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).ToList().ForEach(i => init += i[0]); 
    init += "_"; 
    Random rnd = new Random(); 
    int id = rnd.Next(1, 10000); 
    string initid = init + id; 
    string phone = phonebox.Text; 
    string color = colorbox.Text; 
    string age = agebox.Text; 
    string datetime = DateTime.Now.ToString("MMM dd yyyy h:mmtt"); 

    SqlConnection con = new SqlConnection("Data Source=localhost\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Public\\public website\\slDataBase.mdf;Integrated Security=True"); 
    SqlCommand cmd = new SqlCommand(); 
    if (statuslabel.InnerText == "Adding New Record") 
    { 
     cmd = new SqlCommand("INSERT into precordTable VALUES ('" + fname + "','" + lname + "','" + combname + "', '" + initid + "' , '' , '" + sex + "', '" + phone + "', '" + color + "', '" + age + "', '" + datetime + "', '','')", con); 
    } 
    else if (statuslabel.InnerText == "Editing Existing Record") 
    { 
     cmd = new SqlCommand("update precordTable set fname='" + fname + "', lname='" + lname + "', name='" + combname + "' , sex='" + sex + "', phone='" + phone + "', color='" + color + "', age='" + age + "' where initid='" + update + "';", con); 
    } 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 

    statuslabel.InnerText = "Adding New Record"; 
    fnamebox.Text = ""; 
    lnamebox.Text = ""; 
    sexbox.Text = ""; 
    phonebox.Text = ""; 
    colorbox.Text = ""; 
    agebox.Text = ""; 

} 

Edit: Ich weiß auch, über bobby Drop-Tabellen. Es ist kein Problem für diese spezifische Implementierung.

Edit 2: Ich habe vergessen zu erwähnen, dass das Klicken auf den Refresh-Button ausreicht, um doppelte Datensätze hinzuzufügen, und es gibt nicht einmal die Formularübergabewarnung ("Um diese Seite anzuzeigen, muss Firefox Informationen senden, die alle wiederholen Aktion (z. B. eine Suche oder Auftragsbestätigung), die früher durchgeführt wurde. ")

+0

Es klingt wie Sie irgendwie auf die Schaltfläche Click-Ereignis in dem Ereignis Page Load Auslösung werden. Kannst du den Code, den du in diesem Event hast, posten? –

+0

Ich habe alles rauskommen und es passiert immer noch. – anesthetic

Antwort

1

Es war ein lauwarmes heißes, während ich an einem ASP.NET WebForms (Ihr Code ist Webforms, richtig?) Projekt und Ich bin nicht ganz sicher, dass es keine Informationen über Ihre Situation gibt, die einen Unterschied machen könnten, wenn ich versuche zu verstehen, was falsch ist, aber ich erinnere mich an etwas, das den Seitenlebenszyklus in den Sitzungsvariablen anspricht Daten werden nicht auf einen Standardwert zurückgesetzt oder durch spätere Code - Ereignismethoden später in der Seitenlebenszyklus, wenn es beibehalten wurde. Sie sollten dies überprüfen können, indem Sie den Code in diesen verschiedenen Ereignissen debuggen. Wenn es nicht genau dieses Problem ist, ist es wahrscheinlich etwas anderes, was den Seitenlebenszyklus betrifft, und nicht, wie Sie es erwarten würden.

Eine gute Referenz ist direkt von der Quelle: https://msdn.microsoft.com/en-us/library/ms178472.aspx, ich denke, dass diese Seite seit den frühen Tagen von WebForms erheblich verbessert hat. HTH