2010-12-10 23 views
2

我有一個文本框和一個按鈕。在頁面加載時,我從一行中選擇一列並將其值放入文本框中。我有一個按鈕單擊方法,使用文本框中的值更新相同的列/行。LINQ到SQL更新使用asp.net文本框的問題

我遇到的問題是,當我清除文本框中的文本,輸入新的數據並點擊提交新的文本值不被保存,它使用舊的。

我在按鈕點擊方法的末尾放了一個斷點,看起來asp.net發送的是文本框的舊值,而不是我放入的新值。我完全被困住了。

  • 即使我在文本框上有viewstate false,此問題仍然存在。
  • 我的兩個LINQ查詢都包含在using語句中。

任何想法?

編輯:這裏是全碼:

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

請問您發送的代碼 – 2010-12-10 00:35:59

回答

1

正如您所說,在Page_Load中,您正在將原始值檢索到覆蓋任何更改的文本框中。

是的,Page_Load在按鈕點擊(或任何其他控件事件)執行之前執行。我猜測你在此之前已經完成了Windows Forms開發,而ASP.Net Web窗體事件模型則完全不同。檢查出ASP.NET Page Life Cycle Overview

1

只是以跟蹤錯誤,請嘗試將標籤=(lblDescription.Text)和原樣留下的代碼的其餘部分,換上新的價值在文本框(editdescription.text)試試吧,告訴我你看到了什麼

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

看我上面的編輯,我嘗試過使用這種語法,但原始值仍然被張貼。 – 2010-12-10 00:46:12

+1

看到我的答案,我明白了。 – 2010-12-10 02:32:29

1

我想通了。我應該使用if(!IsPostBack)代碼最初用它的值填充文本框。

但是這對我來說沒有意義。如果頁面被加載並且文本框文本得到一個值,那麼你清除這個值並且嘗試將它插入到數據庫中,它應該插入這個值,然後當頁面回發時它會從數據庫中獲取新值並且把文本框中的值。

它實際上工作的方式使它看起來好像它正在執行頁面加載代碼,然後在回發後執行按鈕點擊代碼。