網頁

2012年10月20日 星期六

注意Page_Load中的事件

筆者最近在測試一些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 網頁生命週期概觀



1 則留言:

  1. ASP.NET 網頁存留週期概觀
    http://msdn.microsoft.com/zh-tw/library/ms178472.aspx

    回覆刪除