跟蹤頁面執行
設置斷點是頁面調試過程中的常用手段除此之外還可以通過查看頁面的跟蹤信息進行錯誤排查以及性能優化ASPNET中啟用頁面跟蹤非常方便只需在Page指令中加入Trace=True屬性即可
<%@ Page Language=
C#
Trace=
true
>
跟蹤信息可以分為兩類
a頁面執行詳細情況
其中主要包括頁面生命周期中各事件列表控件樹列表(可以查看每個控件的HTML字節數以及ViewState字節數)Session狀態Application狀態Cookie集合QueryString集合服務器變量等信息
b自定義跟蹤信息
通過在頁面代碼中調用TraceWrite()或TraceWarn()方法便可將指定內容寫入跟蹤信息中的Trace Information節就算頁面發生了錯誤跟蹤信息還是會顯示出來並且在發布應用程序時無需刪除相關的跟蹤代碼只需從Page指令中移除Trace屬性即可
在服務器端控件中添加客戶端屬性
我們有時會向服務器端控件中添加一些特殊的屬性這類屬性不需要服務器端的處理只需簡單的發送至客戶端即可我們不妨稱其為客戶端屬性例如HTML屬性或自定義屬性(可能用於實現某種特定的JavaScript功能)可以通過以下幾種方法達到這個目的
a直接向控件添加客戶端屬性
其中的onmouseover是客戶端屬性注意編譯器是允許這種寫法的但會顯示警告
b調用內置方法
可以通過調用WebControlAttributesAdd()方法為控件添加客戶端屬性如下所示
MyButton
Attributes
Add(
onmouseover
this
style
cursor=
pointer
);
這也是最常用的方法
c創建自定義控件
如果某個類型的服務器端控件中經常需要添加客戶端屬性則可以考慮創建一個繼承自該服務器端控件的自定義控件其中包含特定的客戶端屬性
正是考慮到這一點ASPNET 中為按鈕控件(包括ButtonLinkButtonImageButton控件)提供了OnClientClick屬性可以這樣寫
MyButton
OnClientClick =
alert(
Hello!
)
;
真是貼心的功能!
表單數據的服務器端驗證
將數據驗證任務從服務器端遷移到客戶端的過程促使了JavaScript的產生這也是我們沿用至今的一種方式但只有在保證客戶端JavaScript正常運行的前提下這種方式才能發揮其作用不幸的是總有一些例外比如浏覽器不支持JavaScript或者用戶刻意關閉了浏覽器的JavaScript功能這就導致了第一重防護失效比較保險的做法是加入第二重防護即對用戶提交的數據進行服務器端驗證但這無疑將增加開發者的工作量
ASPNET 提供了一系列表單數據驗證控件可以非常輕松的完成客戶端及服務器端的雙重數據驗證任務但要使服務器端驗證功能發揮作用還需要用到PageIsValid屬性請看下面的例子
姓名 ator ID=RequiredFieldValidator ControlToValidate=txtName ErrorMessage=請填寫姓名! Display=Dynamic runat=server>
這是一個HTML片段其中有一個RequiredFieldValidator控件用於檢查是否已填寫姓名下面是點擊按鈕時執行的服務器端代碼:
protected void btnSubmit_Click(object sender EventArgs e){if (PageIsValid) //注意不要遺漏對PageIsValid屬性的判斷{ResponseWrite(你的名字是 + txtNameText);}}
其中要特別注意對PageIsValid屬性的判斷只有頁面中所有驗證控件對數據的驗證都成功時PageIsValid屬性才為True這代表提交的數據為有效數據可以進入下一步操作
跳過表單驗證
在某些情況下我們需要跳過表單中所有控件的驗證然而在另外一些情況下我們卻希望有選擇的觸發表單中某些控件的驗證功能分別來看看這兩種情況
a跳過所有驗證
假設有個表單其中除了各種數據錄入控件外還有兩個按鈕一個是提交按鈕另一個是取消按鈕同時表單中還有一些數據驗證控件我們希望當點擊取消按鈕的時候無需驗證表單中數據的有效性而是直接將頁面提交至服務器並將其重定向到某個指定頁面
要實現這個功能可以利用按鈕控件(包括ButtonLinkButtonImageButton控件)的CausesValidation屬性將該屬性設為false即可跳過表單中的所有驗證
b觸發某些驗證
假設有個表單被劃分成兩個功能區一個用於用戶登錄另一個用於用戶注冊我們希望當點擊登錄按鈕時只觸發登錄區的數據驗證當點擊注冊按鈕時只觸發注冊區的數據驗證
解決辦法是將相關的數據驗證控件和數據提交控件(按鈕控件)加入同一個驗證組這一點是通過將各相關控件的ValidationGroup屬性設為相同的值來實現的
保持滾動條位置
假設有個頁面其中以列表形式顯示了一些數據記錄每次編輯其中的記錄時都需要向服務器提交頁面為了提供良好的用戶體驗我們希望每次編輯一條記錄並保存後滾動條位置都能保持不變傳統的做法是每次提交頁面時將當前滾動條所在位置信息按某種方式(Hidden字段或QueryString)傳給服務器端當頁面返回客戶端時由服務器端根據傳入的位置信息以JavaScript形式重新設置滾動條位置
如果通過ASPNET來實現這一功能將變得非常簡單只需在Page指令中加入MaintainScrollPositionOnPostback=true屬性即可
<%@ Page Language=
C#
MaintainScrollPositionOnPostback=
true
>
禁用不必要的ViewState
在ASPNET的運行機制中ViewState起著重要的作用ViewState經過編碼後存入表單Hidden字段每當頁面回傳至服務器時再進行解碼因此ViewState的使用會帶來兩個問題帶寬的占用以及計算資源的消耗好在不是所有控件都需要啟用ViewState我們完全可以禁用不必要的ViewState
ViewState默認是開啟的需要手動關閉
a禁用頁面ViewState
在Page指令中加入EnableViewState=false屬性即可
<%@ Page Language=
C#
EnableViewState=
false
>
加入這個屬性後整個頁面以及其中的所有控件都將無法使用ViewState因此需謹慎使用
b禁用控件ViewState
這是推薦的方式將控件的EnableViewState屬性設為False即可禁用其ViewState這裡有個簡單的竅門
如果某個控件的狀態不能由操作者改變則可以禁用其ViewState最典型的莫過於Label控件了只能顯示信息無法操作
但TextBoxDorpDownList等控件的狀態是可以改變的(通過輸入選擇等操作)因此保留他們的ViewState還是有用的
From:http://tw.wingwit.com/Article/program/net/201311/15296.html