筆者最近在測試一些DB資料型別時,遇到一個問題,程式碼如下:
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text= "";
}
protected void Button1_Click(object sender, EventArgs e)
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
test table = new test();
table.moneytype =Convert.ToDecimal(TextBox1.Text);
db.SubmitChanges();
}
}
1. 當網頁載入時,將TextBox1內容清空
2. 當點擊Button1時,開啟資料連線,將資料輸入到monentype並儲存
看起來很合乎常理對吧?
但是當我輸入資料按下按鈕後卻發生了錯誤,錯誤訊息為未輸入正確的字串......,輸入資料為null
其實原因很簡單,因為按下按鈕後網頁的執行順序如下:
1. 當筆者按下按鈕時,網頁會再重新執行Page_Load
而我又很自作聰明的在Page_Load將TextBox1內容清空
2. 當Page_Load做完後才會執行輸入資料的動作,這時TextBox1內容是空的,導致完全沒有數值進資料表,因此就發生錯誤了.
要注意的是網頁中每個觸發事件時都會執行Page_load中的事件,筆者就是不了解網頁事件的執行順序而發生這個錯誤.
解決的方法是資料存進資料庫後再清空TextBox1就行了.
因此程式碼修改如下:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
test table = new test();
table.moneytype =Convert.ToDecimal(TextBox1.Text);
db.SubmitChanges();
}
TextBox1.Text= "";
}
參考資料來源:ASP.NET 網頁生命週期概觀
ASP.NET 網頁存留週期概觀
回覆刪除http://msdn.microsoft.com/zh-tw/library/ms178472.aspx