[翻译]你或许还未听说过的一些ASP.NET 2.0要诀
?翻譯不當請指正~~畢竟我這方面的能力還是蠻欠缺的,呵呵~~
[04月26號:我已經將本文所有Tips做到一個Demo中,提供下載:Demo下載]
在開發(fā)Web應用程序方面,Asp.net是一個令人敬畏的框架。如果你使用過一段時間,那么這就不是什么秘密了。它提供了一些十分強大的新特征,而你只需要些少量的代碼就能實現(xiàn)。我曾經列出一個清單,上面是一些你可以只用少量或不用任何c#/VB.net代碼就能實現(xiàn)的非常簡單(甚至很酷)的功能。如果你有其他建議,可以添加評論,如果你的建議是一件能夠容易應用的任務,我將進一步更新我的清單。
1、當頁面PostBacks的時候,保持滾動條的位置。
在ASP.NET 1.1中,當進行postback 操作的時候,如果想保持滾動條的位置,那真是一件痛苦的事情,特別是當頁面上有一個grid(表格?)而你想編輯某一具體行的時候。頁面將會重新加載,滾動條位于頁面頂端,而不是你期望的位置,這樣你就不得不下拉滾動條。在ASP.net2.0中,你可以簡單地在Page directive這里加上MaintainScrollPostionOnPostBack 屬性(來實現(xiàn)同樣的功能)。
<%@?Page?Language="C#"?MaintainScrollPositionOnPostback="true"?AutoEventWireup="true"?CodeFile=""?Inherits=""?%>?
2、當頁面加載的時候,控件獲得默認焦點。
這是另一件很簡單的事情,而不用通過寫javascrip腳本。如果你的頁面上只有一個(或者兩個)文本輸入框,用戶為什么非要點擊文本框之后才能開始輸入呢?光標難道就不能自動位于文本框,用戶可以馬上輸入?使用HtmlForm控件的DefaultFocus 屬性,你就可以很容易地做到。
<form?id="frm"?DefaultFocus="txtUserName"?runat="server">
??
</form>? ?
3、當用戶按下Enter鍵的時候,設置默認觸發(fā)按鈕。
在ASP.NET 1.1中,這又是一件十分痛苦的事情。當用戶按下Enter鍵的時候,你需要寫一些javascript代碼,來保證頁面上適當?shù)陌粹o觸發(fā)一個服務器端“Click”事件。幸運的是,每當用戶按下Enter鍵的時候,你現(xiàn)在可以使用HtmlForm的DefaultButton 屬性來設置點擊哪一個按鈕。還有一種情況,每當user(指光標是否更合適?)進入頁面上不同面板觸發(fā)不同的按鈕,(這個情況下),就可以設置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()方法,也有一點小技巧。想了解更多細節(jié),稍后請訪問 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介紹了跨頁面提交的概念。按鈕提交數(shù)據(jù)到一個頁面,把按鈕的PostBackUrl屬性設置為目標頁面的名字,就是通過這種方式(實現(xiàn)跨頁面提交)。
一般情況下,可以通過PreviousPage.FindControl("ControlID")方式來訪問提交的數(shù)據(jù)。然而,這需要看情況(requires a cast),如果你需要訪問先前頁面中的屬性(經常需要這么做)。如果在發(fā)起回傳操作的頁面后臺代碼中增加一個公有屬性,那么你可以通過在本次回傳的目標頁中增加PreviousPageType directive,以強類型的方式來訪問這些公有屬性。如果你還沒有嘗試過,這聽起來或許有點混淆,所以允許我多解釋一些。
假如有一個頁面叫做Default.aspx,同時向外提供一個公有屬性,來返回頁面中定義的TextBox的值。數(shù)據(jù)所要提交到的頁面(姑且叫做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屬性,根據(jù)這個屬性,你可以定義一個基類型,這樣你可以讓一個或者多個頁面獲取這個基類型的值來支持多頁面。你可以從這里了解更多關于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一樣,也可以定義一個類型名)
這樣,你就能在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之外的驗證都被忽略了。這里有一個示例:
????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?
[以下不譯了...上午火箭贏球了,開心之余一口氣譯完了呵呵~~~]
That's all for now.? There are a lot of other things that could be mentioned and I'll try to keep this post?updated.? Have a great?(simple) ASP.NET 2.0 tip or trick?? Post the details in the comments and I'll add it if the content is appropriate for the list.? Make sure to list your name so I can give proper credit.
For those who are interested, you can also view videos I've put together that show how to accomplish different tasks from working with AJAX, to ASP.NET to Web Services and WCF at the following URL:
http://weblogs.asp.net/dwahlin/archive/tags/Video/default.aspx
轉載于:https://www.cnblogs.com/lxinxuan/archive/2007/04/21/721980.html
總結
以上是生活随笔為你收集整理的[翻译]你或许还未听说过的一些ASP.NET 2.0要诀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL用户存在则更新不存在则插入
- 下一篇: eclipse集成processing、