2013年10月30日 星期三

CustomValidator OnServerValidate event not Firing? 不會進入OnServerValidate事件?

在新增使用者的介面,我想要使用CustomValidator 在資料送出前檢查使用者帳戶是否已經存在資料庫。CustomValidator 可使用OnServerValidate事件,在後台進行自己想要的驗證過程。


但是測試的時候卻發現,按下確認按鈕後並不會進入OnServerValidate事件!ControlToValidateValidationGroup屬性都有設好,但就是不會進入,到底是為什麼呢?



上網搜尋原因,原來是它必須要在觸發"Page.IsValid"的時候,才會進入OnServerValidate事件,否則根本不會有驗證的效果。所以需要在確認按鈕的Click事件裡面,檢查Page.IsValid。

if (Page.IsValid)
{
    ... ...
}

但是按下確認按鈕後,還是不行!! 為什麼呢?在確認按鈕的Click事件加入中斷點,發現根本沒有進入Click事件...
原來是跟頁面生命週期的概念有關了~~因為按下按鈕後,頁面會進行一次Postback,也就是一次重生,重生過程中會先進行Validate,才會處理其他事件(按鈕Click)。也就是畫面中其他欄位的Validator產生作用了,有些欄位並沒有通過驗證,所以根本不會進行到Click的動作。

所以當其他欄位都正確填入,順利通過驗證後,按下確認按鈕,就會執行到 if (Page.IsValid) 程式碼,之後才會觸發進入OnServerValidate事件。





2013年10月21日 星期一

ASP Dropdownlist + Calendar 下拉式選單搭配日曆控制項

效果:
(1) 按下日曆圖示,可跳出日曆控制項
(2) 用下拉式選單選擇年分,即時更新日曆控制項




作法:

2013年10月11日 星期五

ASP.NET頁面生命週期問題

概略的觀念是頁面包含前台和後台,前台的HTML是靜態的呈現,後台的code是運作,運作完成之後計算出要在前台呈現的HTML,然後後台就清除,頁面進入「死」的狀態,直到事件發生,使頁面復活再循環一次生命週期。

頁面生命週期階段:

  1. 瀏覽器請求
  2. 頁面框架初始化 Page.Init()
  3. 用戶程式碼初始化 Page.Load()
  4. 驗證
  5. 事件處理: 處理上一個生命週期完成後觸發的事件
  6. 呈現 Page_PreRender()
  7. 清除 Page_Unload()


因為頁面會死掉,所以裡面的變數也會跟著不見,全域變數也是一樣。
這時候就要利用Session等方法來儲存資料。



參考:王者歸來ASP.NET 4 權威指南,馬偉  著

2013年10月7日 星期一

馬修公爵雜誌--創刊誌

本人楊基恩,男性,自封稱號馬修公爵,出母腹至今約25年又127天,位置在+25° 0' 4.40", +121° 31' 17.40"台灣台北永和區,六層樓的高度。於2013年10月7日22:30左右,使用ASUS A53S筆記型電腦繁體中文語系,以右手食指點擊羅技牌藍芽滑鼠之左鍵,運行Google Chrome瀏覽器,開創了本網誌,並命名為「馬修公爵雜誌」。

因為計畫在本網誌張貼的內容可能紛雜,無特定主題,故名為「雜誌」。預計包含的主題有:生活感想抒發、靈感散文創作、程式設計等電腦學習筆記。與信仰相關的內容則統一張貼於「馬超的靈修天地」。

細述因由,概為時勢所趨。首先,本人第一份網誌的「無名小站」代碼庫在不久後即將遭到毀滅,雖然早已沒落,文章稀少,但這象徵著一個時代的結束。第二,本人大學以後較常張貼之「PTT2」個人版,雖仍運作正常,但可能是使用者大幅轉移至Facebook而造成觀看及互動人數下滑,已不符使用需求。

另一原因為目前開始的工作內容多為電腦程式相關,時常須上網搜尋前人的智慧結晶,使敝人有感求之於人者太多,因此想將學習筆記回饋於大眾。谷歌公司出品的Blogger,管理容易,且可經由其搜尋引擎被較多人接觸,是故擇之。

僅此短文為誌。