我第一次使用 C# .NET 搞開發試驗,但沒想到偏偏遇上了這麼個怪問題打擊了我對 .NET 的信心。其實事情經過也就很簡單:我在頁面上添加了一個 ASP 按鈕控件,雙擊一下,也就自動生成了以下鼠標事件函數:protected void Button1_Click(object sender, EventArgs e)正常來講,不就是把該按鈕點擊之後要執行的代碼寫進這個函數麼。可是寫進去之後,一運行該 ASP 網頁,點了該按鈕永遠都是第一步就往表單 action 的目標頁面跑去。為了驗證該鼠標事件是否被響應,本人特地在裏頭加了斷點,結果再次運行的時候,程序根本就沒有經過該斷點!也就是,點擊按鈕竟然激活不了鼠標事件函數。我個人起初的判斷是:在單擊事件函數被激活之前,定向到表單提交頁面(action)的行為已經搶先於前者發生,所以單擊事件函數不再被激活。但後來有更奇怪的事情否定了本人的這一猜想:我添加了一個 ASP 文本框控件,寫了一點提示性文字在裏頭,然後做了一個單擊事件函數,讓鼠標一點擊該文本框的時候把提示性文字抹去,變成空白的供用戶填寫。然而,同樣的,這個鼠標事件函數也是一點響應都沒有!而單擊文本框的時候表單顯然是不會提交的,也就不存在表單提交搶先於鼠標事件函數激活這回事了!這著實讓人不可理解:ASP 控件是 .NET 開發的基礎核心,單擊事件函數又是這些控件的基礎核心,連最基礎核心的東西都無法實現,我整個 ASP 頁面連一個 ASP 控件都無法添加了,加進去的全都變成擺設。而恰恰相反的是,那些普通的 HTML 控件,用 JS 寫鼠標事件,一律正常響應,包括文本框清除文字特效。但是,在 ASP 表單裏,普通的 HTML 文本框控件是不作為參數傳遞源頭的,也就是表單以 get 模式提交後地址欄裏找不到該文本框的對象名及其所攜帶的參數,到頭來我還得用回 ASP 文本框控件……可是鼠標事件無響應這個古怪問題不解決,讓我怎麼放心地用這些 ASP 控件呢?

解决方案 »

  1.   

    先去看看ASP.NET页面对象模型,了解一下什么叫页面生存周期...http://msdn.microsoft.com/zh-cn/library/aa479007.aspx再去看看什么是IsPostBack,什么叫回发...http://msdn.microsoft.com/zh-cn/library/system.web.ui.page.ispostback(VS.80).aspx
      

  2.   

    看看ASP.net中页面事件的先后顺序 
    function __doPostBack(eventTarget, eventArgument) 
        {
            var theform = document.WebForm2;
            theform.__EVENTTARGET.value = eventTarget;
            theform.__EVENTARGUMENT.value = eventArgument;
            theform.submit();
        }
    客户端触发事件后调用__doPostBack方法,将表示触发的控件源的eventTarget 和事件参数eventArgument分别付给两个隐藏域__EVENTTARGET和__EVENTARGUMENT,然后提交Form,在服务端根据__EVENTTARGET和__EVENTARGUMENT来判断是哪个控件的什么事件触发了。
    看看PostBack的原理
      

  3.   

    樓上這一啟發,我倒是明白這 ASP 控件鼠標事件函數該怎麼去調用了。唯一不爽的是文本框控件竟然不設單擊事件。算了,我還是用 <a> 標籤把文本框包起來,然後用 JS 去做個單擊事件得了(結果是成功的)。不管怎麼說,感謝樓上點撥。