隨著微軟NET的流行ASPNET越來越為廣大開發人員所接受作為ASPNET的開發人員我們不僅需要掌握其基本的原理更要多多實踐從實踐中獲取真正的開發本領在我們的實際開發中往往基本的原理滿足不了開發需求我們更多的要積累一些開發技巧本文就向大家介紹一些實用技巧希望對大家的開發有所裨益
一般的情況下我們是使用// 這樣的相對路徑來確定和規劃我們的資源(比如圖片資源文件)但這種方式下在我們部署應用的時候可能會出錯另外對於ascx的控件中如果包含了一個圖片而這個控件被我們在不同層次的兩個的aspx文件分別引用時問題就會出現了 ~/image/aboutbmp 是一種非常好的方法它以Web應用程序的根為起始點這樣使得比你使用/image/aboutbmp這樣的方式要更加靈活和方便有一點不好是這種方式是在ASPNET運行時動態解析的所以在IDE設計模式中你可能不能預覽它
在刷新和提交頁面後保存你的頁面滾動條的位置經常有這樣的情況我們需要用戶提交一個表單但是表單中有超過+個?控件或文本框要填寫也就是說用戶需要拉動IE的滾動條才能夠填得完那麼假如用戶正在可見IE范圍的/處選擇了一個組合框的值很不幸組合框是服務器端的那麼也就意味著頁面會提交一次而當用戶再看見刷新過的頁面時頁面確定在/的地方也就是顯示在頁面最開始的地方用戶只有拖動鼠標然後接著剛剛的地方再填寫剩下的個控件很不幸個控件又需要他選擇一下? 用下面的方法可以很快地確定和記住你提交前的位置
網上的Old Dog Learns New Tricks也有一個類似的例子Maintain Scroll Position in any Page Element不過他使用了Web Behavior這意味著你需要使用一個htc文件
Private Sub RetainScrollPosition() Dim saveScrollPosition As New StringBuilder
Dim setScrollPosition As New StringBuilder RegisterHiddenField(__SCROLLPOS )
saveScrollPositionAppend(< script language=javascript>)
saveScrollPositionAppend(function saveScrollPosition() {)
saveScrollPositionAppend( documentforms[]__SCROLLPOSvalue = thebodyscrollTop;)
saveScrollPositionAppend(})
saveScrollPositionAppend(thebodyonscroll=saveScrollPosition;)
saveScrollPositionAppend(< /script>) RegisterStartupScript(saveScroll
saveScrollPositionToString()) If (PageIsPostBack = True) Then setScrollPositionAppend(<
script language=javascript>)
setScrollPositionAppend(function setScrollPosition() {)
setScrollPositionAppend( thebodyscrollTop = & Request(__SCROLLPOS) & ;)
setScrollPositionAppend(})
setScrollPositionAppend(thebodyonload=setScrollPosition;)
setScrollPositionAppend(< /script>)
RegisterStartupScript(setScroll setScrollPositionToString()) End If End Sub Private
Sub Page_Load(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles MyBaseLoad
RetainScrollPosition()
End Sub
DataList使用不同風格的模板這招也非常實用你可以制作兩個不同的模板或表現形式分別以ascx控件的形式保存運行時根據某個條件動態的選擇使用其中的一個模板另外ScottGu認為ItemDataBound方法也可以定制你顯示的表現比如加亮某個元素或是加一個促銷廣告圖等等
Dim theme As String
theme = DropDownListSelectedValue DataListItemTemplate =
PageLoadTemplate(theme & ascx) Cool
DataListDataSource = DS
DataListDataBind()
設置服務器端控件的焦點
Private Sub SetFocus(ByVal controlToFocus As Control)
Dim scriptFunction As New StringBuilder
Dim scriptClientId As String scriptClientId = controlToFocusClientID
scriptFunctionAppend(< script language=javascript>)
scriptFunctionAppend(documentgetElementById( & scriptClientId & )focus();)
scriptFunctionAppend(< /script>)
RegisterStartupScript(focus scriptFunctionToString())
End Sub Private Sub Page_Load(ByVal sender As SystemObject ByVal e As SystemEventArgs)
Handles MyBaseLoad
If (PageIsPostBack = False) Then
SetFocus(TextBox)
End If
End Sub
滾動DataGrid 這招就更簡單了有時候你的頁面只有一個固定的地方但是需要顯示非常多的數據亦或是也不定但是只有固定的一個地方給你顯示它了這時你就可以用下面這招自動出滾動條而且適用許多控件很簡單將你的控件放在一個DIV中將overflow屬性設置成auto < div style=height:px;width:px;overflow:auto>
< asp:datagrid id=MyGrid runat=server/>
< /div>
動態創建控件利用PlaceHolder控件這東西在ASPNET MutilView和Master Page中運用的就更加多了
Sub Page_Load()
Dim i as Integer
For i= to
Dim myUserControl as Control
myUserControl = PageLoadControl(fooascx)
PlaceHolderControlsAdd(myUserControl)
PlaceHolderControlsAdd(New LiteralControl(< br>))
Next i
End Sub
客戶端代碼的使用
) 可以使用客戶端的事件代碼但兩者不能同名服務器端代碼的名是你可以控制的對於非ASPNET的標准控件的自定義控件必須實現IAttributeAccessor接口或從WebControl派生並且可用expando屬性
asp:ImageButton id=foo
ImageUrl=startjpg
onMouseOver=rollover(this);
onMouseOut=rollout(this)
rolloversrc=myrolloverjpg
rolloutsrc=myrolloutjpg
runat=server/>< input type=Button onClick=return clientHandler()
onServerClick=Button_Click … />
) 使用可以在Postback之前執行客戶端代碼當然也可以取消這次Postback另外也可以訪問客戶端該頁所有的客戶端控件
Private Sub Page_Load(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles MyBaseLoadRegisterOnSubmitStatement(foo return confirm(Are you sure you want to submit the order?);)
End Sub
From:http://tw.wingwit.com/Article/program/net/201311/12854.html