你或许还未听说过的一些ASP.NET 2.0要诀 [转]
1、當(dāng)頁面PostBacks的時候,保持滾動條的位置。
在ASP.NET 1.1中,當(dāng)進(jìn)行postback 操作的時候,如果想保持滾動條的位置,那真是一件痛苦的事情,特別是當(dāng)頁面上有一個grid(表格?)而你想編輯某一具體行的時候。頁面將會重新加載,滾動條位于頁面頂端,而不是你期望的位置,這樣你就不得不下拉滾動條。在ASP.net2.0中,你可以簡單地在Page directive這里加上MaintainScrollPostionOnPostBack 屬性(來實(shí)現(xiàn)同樣的功能)。
<%@?Page?Language="C#"?MaintainScrollPositionOnPostback="true"?AutoEventWireup="true"?CodeFile=""?Inherits=""?%>?
2、當(dāng)頁面加載的時候,控件獲得默認(rèn)焦點(diǎn)。
這是另一件很簡單的事情,而不用通過寫javascrip腳本。如果你的頁面上只有一個(或者兩個)文本輸入框,用戶為什么非要點(diǎn)擊文本框之后才能開始輸入呢?光標(biāo)難道就不能自動位于文本框,用戶可以馬上輸入?使用HtmlForm控件的DefaultFocus 屬性,你就可以很容易地做到。
<form?id="frm"?DefaultFocus="txtUserName"?runat="server">
??
</form>??
3、當(dāng)用戶按下Enter鍵的時候,設(shè)置默認(rèn)觸發(fā)按鈕。
在ASP.NET 1.1中,這又是一件十分痛苦的事情。當(dāng)用戶按下Enter鍵的時候,你需要寫一些javascript代碼,來保證頁面上適當(dāng)?shù)陌粹o觸發(fā)一個服務(wù)器端“Click”事件。幸運(yùn)的是,每當(dāng)用戶按下Enter鍵的時候,你現(xiàn)在可以使用HtmlForm的DefaultButton 屬性來設(shè)置點(diǎn)擊哪一個按鈕。還有一種情況,每當(dāng)user(指光標(biāo)是否更合適?)進(jìn)入頁面上不同面板觸發(fā)不同的按鈕,(這個情況下),就可以設(shè)置Panel控件的DefaultButton 屬性。
<form?id="frm"?DefaultButton="btnSubmit"?runat="server">
??
</form>?
4、容易地定位nested controls(嵌套控件?排列整齊的控件?表達(dá)不出來...呵呵~)。
在一個頁面的控件層次中查找某些控件,確實(shí)是一件很頭痛的事。但是如果你知道控件是如何嵌套(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控件里面的文本框設(shè)置焦點(diǎn)。注意,用“$”來劃定嵌套方式(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>在服務(wù)器端代碼中調(diào)用FindControl()方法,也有一點(diǎn)小技巧。想了解更多細(xì)節(jié),稍后請?jiān)L問 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強(qiáng)類型方式訪問跨頁面PostBack控件。
這一條比其他任何一點(diǎn)都更加involved(“包含”?不像,應(yīng)該是“不常用”的意思吧),但是十分有用。一個頁面提交信息到另一個頁面,在這里ASP.NET 2.0介紹了跨頁面提交的概念。按鈕提交數(shù)據(jù)到一個頁面,把按鈕的PostBackUrl屬性設(shè)置為目標(biāo)頁面的名字,就是通過這種方式(實(shí)現(xiàn)跨頁面提交)。
一般情況下,可以通過PreviousPage.FindControl("ControlID")方式來訪問提交的數(shù)據(jù)。然而,這需要看情況(requires a cast),如果你需要訪問先前頁面中的屬性(經(jīng)常需要這么做)。如果在發(fā)起回傳操作的頁面后臺代碼中增加一個公有屬性,那么你可以通過在本次回傳的目標(biāo)頁中增加PreviousPageType directive,以強(qiáng)類型的方式來訪問這些公有屬性。如果你還沒有嘗試過,這聽起來或許有點(diǎn)混淆,所以允許我多解釋一些。
假如有一個頁面叫做Default.aspx,同時向外提供一個公有屬性,來返回頁面中定義的TextBox的值。數(shù)據(jù)所要提交到的頁面(姑且叫做SearchResult.aspx吧)就能夠以強(qiáng)類型的方式訪問到這些屬性,只需要在SearchResult.aspx頁面頂端增加PreviousPageType directive:
<%@?PreviousPageType?VirtualPath="Default.aspx"?%>?通過添加這個directive,SearchResult.aspx中的代碼就可以以強(qiáng)類型的方式訪問Default.aspx中定義的TextBox。在以下的示例中,假設(shè)Default.aspx中定義的屬性名是SearchTextBox.
TextBox?tb?=?PreviousPage.SearchTextBox;?很明顯,這行代碼只有在上一頁(Previous Page)是Default.aspx的情況下才能正常運(yùn)行。同時PreviousPageType 也有一個TypeName屬性,根據(jù)這個屬性,你可以定義一個基類型,這樣你可以讓一個或者多個頁面獲取這個基類型的值來支持多頁面。你可以從這里了解更多關(guān)于PreviousPageType。
(這段代碼不好翻譯,免于出錯,僅給出部分意思,望達(dá)人補(bǔ)充,原文如下: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、強(qiáng)類型方式訪問MasterPages控件。
PreviousPageType directive 不是唯一一種提供強(qiáng)類型訪問控件的方式。如果想通過強(qiáng)類型的方式訪問定義在MasterPages中的控件,你可以在要顯示的頁面中增加MasterType directive(記住,MasterType directive和PreviousPageType directive一樣,也可以定義一個類型名)
這樣,你就能在content page中按以下代碼方式訪問目標(biāo)master page中的屬性:
this.Master.HeaderText?=?"Label?updated?using?MasterType?directive?with?VirtualPath?attribute.";?你也可以找到一些關(guān)于使用master page的技巧,包括在我先前的一篇blog中所提到的“共享master page訪問IIS虛擬目錄”等。
7、驗(yàn)證組 Validation groups
你有這樣一個頁面,包含幾個控件和幾個按鈕。當(dāng)點(diǎn)擊其中一個按鈕的時候,你希望evaluate指定的按鈕(evaluate原意:評估,得到……的值;這里的意思:得到按鈕的值),而不是頁面中所有的按鈕。在ASP.NET 1.1 中,如果不去resorting to some hack code(怎么譯?)的話,就很難處理這樣的問題。ASP.NET 2.0給所有的驗(yàn)證控件和按鈕(Button,LinkButton)增加了一個ValidationGroup屬性,可以很容易地解決問題。如果在頁面頂端有一個TextBox和一個Button控件,緊挨著TextBox是一個RequiredFieldValidator控件,把button和RequiredFieldValidator控件上的ValidationGroup屬性值設(shè)置為相同的值,當(dāng)點(diǎn)擊按鈕的時候,你就能fire(“激活”?不解~)一個驗(yàn)證。當(dāng)點(diǎn)擊按鈕的時候,任何定義在ValidationGroup之外的驗(yàn)證都被忽略了。這里有一個示例:
????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沒有直接關(guān)系,與VS.net反而更有關(guān)系。對你們這些只記住了控件或變量名的前幾個字母而沒有記住全名的人來說,這個技巧確實(shí)十分有用。這讓我又有機(jī)會去提起來自microsoft下載到的兩個偉大的下載。第一,在輸入控件名的前幾個字母的時候,按下CTRL+SPACEBAR,VS.net將會跳出一個匹配項(xiàng)的簡短列表。的確,這將更加容易地找到控件或者變量的名字。(譯者注:怎么沒有第二了?)對于感興趣的朋友,微軟提供整套完整的VS.net快捷鍵下載:c# Version here和VB.NET Version here?
轉(zhuǎn)載于:https://www.cnblogs.com/SoulStore/archive/2007/04/23/723610.html
總結(jié)
以上是生活随笔為你收集整理的你或许还未听说过的一些ASP.NET 2.0要诀 [转]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: inux系统中如何进入退出vim编辑器
- 下一篇: 【翻译】Scott Mitchell的A