1、在CallBack之後保持捲軸的位置
在Asp.Net1.1中,CallBack之後保持捲軸的位置是一件非常痛苦的事情,特別是頁中有一個Grid並且想要編輯特定的行。為了不停留在想要得行,頁面會重新載入並且必須在頂部向下滾動。在Asp2.0中,只需要簡單的在頁面的屬性中加入MaintainScrollPostionOnPostBack屬性即可:
1<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeFile="" Inherits="" %>
2、頁面載入後設定預設焦點到控制項上
這也是一個非常簡單的例子,不需要javascript的輔助即可完成。如果在頁面中有一兩個textbox,為什麼要讓使用者去點擊textbox來開始輸入資料呢?是不是可以能夠讓游標已經停留在textbox進而可以輸入資料呢?使用HtmlForm控制項的DefaultFocus屬性就可以輕易的做到:
1<form id="frm" DefaultFocus="txtUserName" runat="server">
2</form>
3、使用者點擊“Enter”鍵時觸發預設按鈕的click實踐。
在Asp1.1中,想要使使用者點擊“Enter”鍵就能關聯到一個button的伺服器段的click事件需要藉助於javascript,這是很痛苦的。幸好,現在可你使用HtmlForm控制項的DefaultButton屬性來設定。這個屬性也可以設定到Panel控制項上,當使用者移動到頁面中不同的Panel上,點擊enter鍵來觸發不同的button控制項的click事件。
1<form id="frm" DefaultButton="btnSubmit" runat="server">
2</form>
4、簡單的尋找固定的控制項。
在頁面的控制項中按層次尋找控制項很痛苦,但是如果你知道控制項怎樣固定在頁面中,就可以用簡寫”$”來尋找控制項而不用寫遞迴的代碼。請看下面代碼,注意”$”的使用:
1<form id="form1" runat="server" DefaultFocus="formVw$txtName">
2 <div>
3 <asp:FormView ID="formVw" runat="server">
4 <ItemTemplate>
5 Name:
6 <asp:TextBox ID="txtName" runat="server"
7 Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
8 </ItemTemplate>
9 </asp:FormView>
10 </div>
11</form>
這個小技巧也可以用在伺服器端的 使用FindControl()函數時:
1TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;
2if (tb != null)
3...{
4 //Access TextBox control
5}
5、強型別訪問跨頁提交的控制項
這個比其他的要內容多一點,但是很有用。ASP.NET 2.0引入了交叉回傳的概念使得一個頁面可以將資訊回傳到另一個不同的頁面,可以將button控制項的PostBackUrl屬性設定為接受回傳資料的頁面來完成。一般的,回傳的資料可以象前一頁那樣做一些事情。但是,如果你要獲得前一頁制定控制項的屬性就需要一個cast(),如果你給引起回傳的code-behide頁面添加了一個公用屬性,你就可以直接以強型別的方式添加PreviousPageType來指向引起回傳的頁面從而能夠訪問那個屬性。
如果有一個頁面Default.aspx,他有一個公用屬性來返回此頁面上一個TextBox,資料回傳目的頁(SearchResults.aspx)可以以強型別的方式(不需要FindControl() 方法),在頁面的頂部添加:
1<%@ PreviousPageType VirtualPath="Default.aspx" %>
這樣,SearchResults.aspx中代碼就可以以強型別的方式訪問Default.aspx的TextBox。下面的例子假定Default.aspx定義的屬性名稱為SearchTextBox:
1TextBox tb = PreviousPage.SearchTextBox;
對於跨頁提交的補充:
在ASP.NET 1.X 版本中,頁面都是提交到自己本身,並不能方便的指定需要提交的目的頁面。例如FirstPage.aspx中的button只能提交到 FirstPage.aspx,而不能提交到SecondPage.aspx。很多時候,ASP.NET 1.X這樣工作方式使我們的開發方式受到不少限制。熟悉ASP/JSP/PHP的朋友大概很不習慣,因為以前經常使用的提交方式突然無法使用,雖然也有解決這個問題的方法(欲詳細瞭解的讀者可去微軟網站收看webcast),可是過程太煩瑣,不甚方便。令我們高興的是,ASP.NET 2.0中有了跨頁面提交的簡單方法。可在第一個頁面中的button添加PostBackUrl屬性設定為接受提交的頁面,並且這個頁面增加PreviousPageType 指令,若要是目標頁面在新視窗中開啟則可以在源頁面<form>標記增加target=’_blank’屬性。
6、強型別訪問主版頁面的控制項
PreviousPageType指令並不是唯一的可以強型別訪問控制項的方法。如果在主版頁面中定義了一個公用屬性,並且想要以強型別的方式訪問它,那麼就可以在頁面頂部添加MasterType指令(注意:MasterType指令同PreviousPageType一樣允許定義一個TypeName)
複製ASPX代碼儲存代碼
你可以在內容頁書寫如下的代碼來訪問目標主版頁面的屬性:
1<%@ MasterType VirtualPath="MasterPage.master" %>
你可以在內容頁書寫如下的代碼來訪問目標主版頁面的屬性:
1this.Master.HeaderText = "Label updated using MasterType directive with VirtualPath attribute.";
7、Validation groups驗證組
一個頁中可能有多個控制項和多個按鈕。當其中的一個按鈕被點擊後想要特定的validator被激發而不是頁面中的所有validator。在ASP.NET 1.1中除了hack code沒有更好的辦法。ASP.NET 2.0中給所有的validator控制項和按鈕(button、linkbutton等等)增加了ValidatorGroup屬性,就可以輕鬆地解決這個問題。如果在頁面中有一個TextBox並且緊挨著他有一個RequiredFieldValidator 和Button控制項,可以將RequiredFieldValidator和Button的ValidationGroup屬性設定成一樣的值從而使得點擊button時只觸發這個RequiredFieldValidator的validor,任何沒有定義在ValidationGroup內的其他的validator都會被忽略。看下例:
1<form id="form1" runat="server">
2 Search Text: <asp:TextBox ID="txtSearch" runat="server" />
3 <asp:RequiredFieldValidator ID="valSearch" runat="Server"
4 ControlToValidate="txtSearch" ValidationGroup="SearchGroup" />
5 <asp:Button ID="btnSearch" runat="server" Text="Search"
6 ValidationGroup="SearchGroup" /> .
7 Other controls with validators and buttons defined here
8</form>