2010-12-10 15 views
2

Ich habe ein Textfeld und eine Schaltfläche. Beim Laden der Seite wähle ich eine Spalte aus einer Zeile und gebe ihren Wert in das Textfeld ein. Ich habe eine Button-Klick-Methode, die dieselbe Spalte/Zeile mit dem Wert in der Textbox aktualisiert.Problem mit LINQ zu SQL Update mit asp.net Textboxen

Das Problem, das ich habe, ist, dass, wenn ich den Text im Textfeld lösche, neue Daten eintippen und den neuen Textwert abfragen wird nicht gespeichert, es verwendet den alten.

Ich habe einen Haltepunkt am Ende meiner Schaltfläche klicken Methode und es scheint, dass asp.net sendet den alten Wert der Textbox, anstatt die neue, die ich in. Ich bin völlig ratlos.

  • Dieses Problem bleibt bestehen, auch wenn ich viewstate false auf der Textbox habe.
  • Beide meine LINQ-Abfragen sind in einer using-Anweisung verpackt.

Irgendwelche Ideen?

Edit: Hier ist der vollständige Code:

protected void Page_Load(object sender, EventArgs e) 
    { 

     using (StoreDataContext da = new StoreDataContext()) 
     { 
      var detail = from a in da.Brands 
         where a.BrandID == 5 
         select new 
         { 
          brand = a, 
         }; 
      foreach (var d in detail) 
      { 
       txtEditDescription.Text = d.brand.Description; 
      } 
     } 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     using (StoreDataContext dk = new StoreDataContext()) 
     { 

      Brand n = dk.Brands.Single(p => p.BrandID == 5); 

     n.Description = txtEditDescription.Text; 

     dk.SubmitChanges(); 
     } 
    } 
+0

würden Sie bitte senden Sie den Code –

Antwort

1

Wie Sie bereits sagten, rufen Sie in Page_Load den ursprünglichen Wert in das Textfeld ab, der alle Änderungen überschreibt.

Ja, Page_Load wird ausgeführt, bevor Button Click (oder ein anderes Steuerelement) ausgeführt wird. Ich gehe davon aus, dass Sie zuvor die Windows Forms-Entwicklung durchgeführt haben, das ASP.Net-Webformular-Ereignismodell ist ziemlich anders. Schau dir die ASP.NET Page Life Cycle Overview an.

+0

Ich habe keine ernsthafte Entwicklung mit Gewinnformen getan. Danke für den Link. –

1

nur den Fehler zu verfolgen, versuchen Sie bitte, wie ist ein label = (lblDescription.Text) und den Rest des Codes zu setzen, setzen Sie den neuen Wert Versuchen Sie es in der Textbox (editdescription.text) und sagen Sie mir, was Sie sehen

foreach (var d in detail) 
     { 
      lblDescription.Text = d.brand.Description; 
     } 
+0

Siehe meine Bearbeitung oben, habe ich versucht, mit dieser Syntax, aber der ursprüngliche Wert wird noch veröffentlicht. –

+1

sehe meine Antwort, ich habe es herausgefunden. –

+0

@nick, congrats ich habe für dich gewählt –

1

Ich fand es heraus. Ich sollte If (! IsPostBack) auf den Code verwenden, der das Textfeld ursprünglich mit seinem Wert füllt.

Das macht jedoch keinen Sinn für mich. Wenn die Seite geladen ist und der Textfeldtext einen Wert erhält, dann löschen Sie diesen Wert und versuchen ihn in die Datenbank einzufügen. Er sollte diesen Wert einfügen und dann, wenn die Seite zurückschickt, den neuen Wert aus der Datenbank holen und ablegen der Wert in der Textbox.

Die Art, wie es tatsächlich funktioniert, scheint es so zu sein, als würde es den Seitenladecode ausführen, bevor der Knopfklick-Code auf dem Post-Back ausgeführt wird.