2013-05-17 29 views
0

我有一個很奇怪的問題。我正在編寫一個項目編輯頁面時遇到了一些奇怪的bug,即ASP將舊值傳給C#.cs代碼。C#獲取文本字段的以前加載的值

在我Page_Load

private int SomeID = 0; 
if (!IsPostBack) { 
    ... 
    SomeID = Convert.ToInt32(Page.RouteData.Values["id"]) 
    LoadFunction(); 
} 

加載功能:

DataBaseDataContext db = new DataBaseDataContext(); 
var Item = db.FirstOrDefault(k => k.ID == SomeID); 

NameTextBox.Text = Item.Name; 
PriceTextBox.Text = Item.Price.ToString(); 

節電功能:

DataBaseDataContext db = new DataBaseDataContext(); 
var Item = db.FirstOrDefault(k => k.ID == SomeID); 

Item.Name = NameTextBox.Text; 
Item.Price = Convert.ToDecimal(PriceTextBox.Text); 
... 
db.SubmitChanges(); 

我打擾了,爲什麼它不保存更改我,所以我在保存函數中設置db.SubmitChanges()斷點(加載工作正常)。但是,當我在VisualStudio中查看預覽值時,它告訴我它想要發送先前加載的值,而不是我在表單中編輯的值。

我必須缺少一些東西,因爲它在我的代碼的其他地方工作,但我不知道它是什麼。

+0

什麼是您的Page_Load樣子? –

+0

我編輯了文章 – Lemurr

+0

當你命中斷點時,NameTextBox.Text顯示什麼?舊的或編輯的值? – YK1

回答

1

嘗試在private int SomeID = 0使用static使用Page.Ispostback都歸到你的Page_Load事件像

//Page_Load Event 
if (!Page.IsPostBack) 
    { 
     DataBaseDataContext db = new DataBaseDataContext(); 
     var Item = db.FirstOrDefault(k => k.ID == SomeID); 

     NameTextBox.Text = Item.Name; 
     PriceTextBox.Text = Item.Price.ToString(); 
    } 

檢查MSDN

相反的private,如果將持有舊的主要價值,解決你的問題也是如此。

希望它適合你。

+0

我的加載函數被封裝在(!IsPostBack)中,並且我保存了f。從按鈕 – Lemurr

+0

被調用,但在你的加載函數中沒有'!IsPostBack'。 – Rahul

1

檢查是否PostBackPage_Load你不是設置值再次TextBox es。

if (!Page.IsPostBack) 
{ 
    DataBaseDataContext db = new DataBaseDataContext(); 
    var Item = db.FirstOrDefault(k => k.ID == SomeID); 

    NameTextBox.Text = Item.Name; 
    PriceTextBox.Text = Item.Price.ToString(); 
} 
+0

我有我的加載函數(!!IsPostBack),並保存了f。從按鈕調用 – Lemurr

+0

然後請顯示更多代碼。 – gzaxx

2

集SomeID外!的IsPostBack