你或許還未聽說過的一些ASP.NET 2.0要訣 [轉]

來源:互聯網
上載者:User
在開發Web應用程式方面,Asp.net是一個令人敬畏的架構。如果你使用過一段時間,那麼這就不是什麼秘密了。它提供了一些十分強大的新特徵,而你只需要些少量的代碼就能實現。我曾經列出一個清單,上面是一些你可以只用少量或不用任何c#/VB.net代碼就能實現的非常簡單(甚至很酷)的功能。如果你有其他建議,可以添加評論,如果你的建議是一件能夠容易應用的任務,我將進一步更新我的清單。

1、當頁面PostBacks的時候,保持捲軸的位置。
在ASP.NET 1.1中,當進行postback 操作的時候,如果想保持捲軸的位置,那真是一件痛苦的事情,特別是當頁面上有一個grid(表格?)而你想編輯某一具體行的時候。頁面將會重新載入,捲軸位於頁面頂端,而不是你期望的位置,這樣你就不得不下拉捲軸。在ASP.net2.0中,你可以簡單地在Page directive這裡加上MaintainScrollPostionOnPostBack 屬性(來實現同樣的功能)。<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeFile="" Inherits="" %> 

2、當頁面載入的時候,控制項獲得預設焦點。
這是另一件很簡單的事情,而不用通過寫javascrip指令碼。如果你的頁面上只有一個(或者兩個)文本輸入框,使用者為什麼非要點擊文字框之後才能開始輸入呢?游標難道就不能自動位於文字框,使用者可以馬上輸入?使用HtmlForm控制項的DefaultFocus 屬性,你就可以很容易地做到。<form id="frm" DefaultFocus="txtUserName" runat="server">
  
</form> 

 
3、當使用者按下Enter鍵的時候,設定預設觸發按鈕。
在ASP.NET 1.1中,這又是一件十分痛苦的事情。當使用者按下Enter鍵的時候,你需要寫一些javascript代碼,來保證頁面上適當的按鈕觸發一個伺服器端“Click”事件。幸運的是,每當使用者按下Enter鍵的時候,你現在可以使用HtmlForm的DefaultButton 屬性來設定點擊哪一個按鈕。還有一種情況,每當user(指游標是否更合適?)進入頁面上不同面板觸發不同的按鈕,(這個情況下),就可以設定Panel控制項的DefaultButton 屬性。<form id="frm" DefaultButton="btnSubmit" runat="server">
  
</form> 

4、容易地定位nested controls(嵌套控制項?排列整齊的控制項?表達不出來...呵呵~)。
在一個頁面的控制項層次中尋找某些控制項,確實是一件很頭痛的事。但是如果你知道控制項是如何嵌套(nest)的,你可以使用不怎麼常用的捷徑"$"來尋找控制項,而不用寫遞迴代碼。If you're looking for a great way to recursively find a control (in cases where you don't know the exact control nesting) check out my good buddy Michael Palermo's blog entry.(這一句是廣告,不翻了~)。以下代碼展示了如何使用DefaultFocus 屬性來給嵌套在FormView控制項裡面的文字框設定焦點。注意,用“$”來劃定嵌套方式(nesting):<form id="form1" runat="server" DefaultFocus="formVw$txtName">
    <div>
        <asp:FormView ID="formVw" runat="server">
            <ItemTemplate>
                Name: 
                <asp:TextBox ID="txtName" runat="server" 
                    Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
            </ItemTemplate>
        </asp:FormView>
    </div>
</form>

在伺服器端代碼中調用FindControl()方法,也有一點小技巧。想瞭解更多細節,稍後請訪問 I blogged about this 。這裡有一個例子:TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;
if (tb != null)
{
    //Access TextBox control

5、Strongly-typed access to cross-page postback controls強型別方式訪問跨頁面PostBack控制項。
這一條比其他任何一點都更加involved(“包含”?不像,應該是“不常用”的意思吧),但是十分有用。一個頁面提交資訊到另一個頁面,在這裡ASP.NET 2.0介紹了跨頁面提交的概念。按鈕提交資料到一個頁面,把按鈕的PostBackUrl屬性設定為目標頁面的名字,就是通過這種方式(實現跨頁面提交)。
一般情況下,可以通過PreviousPage.FindControl("ControlID")方式來訪問提交的資料。然而,這需要看情況(requires a cast),如果你需要訪問先前頁面中的屬性(經常需要這麼做)。如果在發起回傳操作的頁面後台代碼中增加一個公有屬性,那麼你可以通過在本次回傳的目標頁中增加PreviousPageType directive,以強型別的方式來訪問這些公有屬性。如果你還沒有嘗試過,這聽起來或許有點混淆,所以允許我多解釋一些。

假如有一個頁面叫做Default.aspx,同時向外提供一個公有屬性,來返回頁面中定義的TextBox的值。資料所要提交到的頁面(姑且叫做SearchResult.aspx吧)就能夠以強型別的方式訪問到這些屬性,只需要在SearchResult.aspx頁面頂端增加PreviousPageType directive:

<%@ PreviousPageType VirtualPath="Default.aspx" %> 

通過添加這個directive,SearchResult.aspx中的代碼就可以以強型別的方式訪問Default.aspx中定義的TextBox。在以下的樣本中,假設Default.aspx中定義的屬性名稱是SearchTextBox.

TextBox tb = PreviousPage.SearchTextBox; 

很明顯,這行代碼只有在上一頁(Previous Page)是Default.aspx的情況下才能正常運行。同時PreviousPageType 也有一個TypeName屬性,根據這個屬性,你可以定義一個基底類型,這樣你可以讓一個或者多個頁面擷取這個基底類型的值來支援多頁面。你可以從這裡瞭解更多關於PreviousPageType。
(這段代碼不好翻譯,免於出錯,僅給出部分意思,望達人補充,原文如下:This code obviously only works if the previous page is Default.aspx.  PreviousPageType also has a TypeName property as well where you could define a base type that one or more pages derive from to make this technique work with multiple pages.  You can learn more about PreviousPageType here.)

6、強型別方式訪問MasterPages控制項。
PreviousPageType directive 不是唯一一種提供強型別訪問控制項的方式。如果想通過強型別的方式訪問定義在MasterPages中的控制項,你可以在要顯示的頁面中增加MasterType directive(記住,MasterType directive和PreviousPageType directive一樣,也可以定義一個類型名)

<%@ MasterType VirtualPath="MasterPage.master" %> 

這樣,你就能在content page中按以下代碼方式訪問目標master page中的屬性:

this.Master.HeaderText = "Label updated using MasterType directive with VirtualPath attribute."; 

你也可以找到一些關於使用master page的技巧,包括在我先前的一篇blog中所提到的“共用master page訪問IIS虛擬目錄”等。

7、驗證組 Validation groups
你有這樣一個頁面,包含幾個控制項和幾個按鈕。當點擊其中一個按鈕的時候,你希望evaluate指定的按鈕(evaluate原意:評估,得到……的值;這裡的意思:得到按鈕的值),而不是頁面中所有的按鈕。在ASP.NET 1.1 中,如果不去resorting to some hack code(怎麼譯?)的話,就很難處理這樣的問題。ASP.NET 2.0給所有的驗證控制項和按鈕(Button,LinkButton)增加了一個ValidationGroup屬性,可以很容易地解決問題。如果在頁面頂端有一個TextBox和一個Button控制項,緊挨著TextBox是一個RequiredFieldValidator控制項,把button和RequiredFieldValidator控制項上的ValidationGroup屬性值設定為相同的值,當點擊按鈕的時候,你就能fire(“啟用”?不解~)一個驗證。當點擊按鈕的時候,任何定義在ValidationGroup之外的驗證都被忽略了。這裡有一個樣本:

<form id="form1" runat="server">

    Search Text: <asp:TextBox ID="txtSearch" runat="server" /> 

    <asp:RequiredFieldValidator ID="valSearch" runat="Server" 
      ControlToValidate="txtSearch" ValidationGroup="SearchGroup" /> 

    <asp:Button ID="btnSearch" runat="server" Text="Search" 
      ValidationGroup="SearchGroup" />
    .
    Other controls with validators and buttons defined here
</form> 

8、編碼的時候尋找控制項或者變數的名字。
這個技巧和Asp.net沒有直接關係,與VS.net反而更有關係。對你們這些只記住了控制項或變數名的前幾個字母而沒有記住全名的人來說,這個技巧確實十分有用。這讓我又有機會去提起來自microsoft下載到的兩個偉大的下載。第一,在輸入控制項名的前幾個字母的時候,按下CTRL+SPACEBAR,VS.net將會跳出一個匹配項的簡短列表。的確,這將更加容易地找到控制項或者變數的名字。(譯者註:怎麼沒有第二了?)對於感興趣的朋友,微軟提供整套完整的VS.net快速鍵下載:c# Version here和VB.NET Version here 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.