[轉貼]設計ASP.NET應用程序的七大絕招

隨著微軟.NET的流行,ASP.NET越來越為廣大開發人員所接受。作為ASP.NET的開發人員,我們不僅需要掌握其基本的原理,更要多多實踐,從實 踐中獲取真正的開發本領。在我們的實際開發中,往往基本的原理滿足不了開發需求,我們更多的要積累一些開發技巧,本文就向大家介紹一些實用技巧,希望對大 家的開發有所裨益。

1. ~ 的用法
一 般的情況下,我們是使用./../ 這樣的相對路徑來確定和規劃我們的資源(比如圖片、資源文件),但這種方式下在我們部署應用的時候,可能會出錯,另外對於.ascx的控件中如果包含了一 個圖片,而這個控件被我們在不同層次的兩個目錄的aspx文件分別引用時,問題就會出現了。
~/image/about.bmp 是一種非常好的方法,它以Web應用程序的根目錄為起始點,這樣使得比你使用./image/about.bmp這樣的方式要更加靈活和方便。有一點不 好,是這種方式是在ASP.NET運行時動態解析的,所以在IDE設計模式中,你可能不能預覽它。

2. 在刷新和提交頁面後,保存你的頁面滾動條的位置
經 常有這樣的情況,我們需要用戶提交一個表單,但是表單中有超過500+個?控件或文本框要填寫,也就是說用戶需要拉動IE的滾動條才能夠填得完,那麼假如 用戶正在可見IE範圍的2/3處,選擇了一個組合框的值,很不幸組合框是服務器端的,那麼也就意味著頁面會提交一次,而當用戶再看見刷新過的頁面時,頁面 確定在3/1的地方也就是顯示在頁面最開始的地方,用戶只有拖動鼠標,然後接著剛剛的地方再填寫剩下的250個控件,很不幸,370個控件又需要他選擇一 下?
用下面的方法可以很快地確定和記住你提交前的位置。
網上的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”, “0”)
saveScrollPosition.Append(“<script language=’javascript’>”)
saveScrollPosition.Append(“function saveScrollPosition() {“)
saveScrollPosition.Append(” document.forms[0].__SCROLLPOS.value = thebody.scrollTop;”)
saveScrollPosition.Append(“}”)
saveScrollPosition.Append(“thebody.onscroll=saveScrollPosition;”)
saveScrollPosition.Append(“</script>”)
RegisterStartupScript(“saveScroll”, saveScrollPosition.ToString())
If (Page.IsPostBack = True) Then
setScrollPosition.Append(“<script language=’javascript’>”)
setScrollPosition.Append(“function setScrollPosition() {“)
setScrollPosition.Append(” thebody.scrollTop = ” & Request(“__SCROLLPOS”) & “;”)
setScrollPosition.Append(“}”)
setScrollPosition.Append(“thebody.onload=setScrollPosition;”)
setScrollPosition.Append(“</script>”)
RegisterStartupScript(“setScroll”, setScrollPosition.ToString())
End If
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RetainScrollPosition()
End Sub

3. DataList使用不同風格的模板
這招也非常實用,你可以製作兩個不同的模板或表現形式,分別以.ascx控件的形式保存,運行時根據某個條件動態的選擇使用其中的一個模板,另外ScottGu認為ItemDataBound方法也可以定制你顯示的表現,比如加亮某個元素或是加一個促銷廣告圖等等。
Dim theme As String
theme = DropDownList1.SelectedValue
DataList1.ItemTemplate = Page.LoadTemplate(theme & “.ascx”) —Cool
DataList1.DataSource = DS
DataList1.DataBind()

4. 設置服務器端控件的焦點
Private Sub SetFocus(ByVal controlToFocus As Control)
Dim scriptFunction As New StringBuilder
Dim scriptClientId As String
scriptClientId = controlToFocus.ClientID
scriptFunction.Append(“<script language=’javascript’>”)
scriptFunction.Append(“document.getElementById(‘” & scriptClientId & “‘).focus();”)
scriptFunction.Append(“</script>”)
RegisterStartupScript(“focus”, scriptFunction.ToString())
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If (Page.IsPostBack = False) Then
SetFocus(TextBox1)
End If
End Sub

5. 滾動DataGrid
這招就更簡單了,有時候你的頁面只有一個固定的地方,但是需要顯示非常多的數據,亦或是也不定,但是只有固定的一個地方給你顯示它了。這時你就可以用下面這招,自動出滾動條,而且適用許多控件。很簡單將你的控件放在一個DIV中將overflow屬性設置成auto
<div style=「height:400px;width:200px;overflow:auto」>
<asp:datagrid id=「MyGrid」 runat=「server」/>
</div>

6. 動態創建控件
利用PlaceHolder控件,這東西在ASP.NET 2.0 Mutil-View和Master Page中運用的就更加多了。
Sub Page_Load()
Dim i as Integer
For i=0 to 4
Dim myUserControl as Control
myUserControl = Page.LoadControl(「foo.ascx」)
PlaceHolder1.Controls.Add(myUserControl)
PlaceHolder1.Controls.Add(New LiteralControl(「<br>」))
Next i
End Sub

7. 客戶端代碼的使用
1). 可以使用客戶端的事件代碼,但兩者不能同名,服務器端代碼的名是你可以控制的。對於非ASP.NET的標準控件的自定義控件必須實現IAttributeAccessor接口或從WebControl派生並且可用expando屬性
asp:ImageButton id=「foo」
ImageUrl=「start.jpg」
onMouseOver=「rollover(this);」
onMouseOut=「rollout(this)」
rolloversrc=”/Files/BeyondPic/2005-11/12/0511120747085590.jpg”」
runat=「server」/>
<input type=Button onClick=「return clientHandler()」
onServerClick=「Button1_Click」 … />

2). 使用可以在Postback之前執行客戶端代碼,當然也可以取消這次Postback,另外也可以訪問客戶端該頁所有的客戶端控件。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles MyBase.Load
RegisterOnSubmitStatement(“foo”, “return confirm(‘Are you sure you want to submit the order?’);”)
End Sub

3). 還有更複雜的我認為不實用,大家可以自己去看,主要是運用RegisterStartupScript和JavaScript的技術
以上文章介紹了一些ASP.NET中常用而且比較實用的技巧,希望能對大家的實際開發有所裨益!

[轉貼]超限傳檔術 – 超級快的18個傳檔方式

原文來自: http://www.sharecool.org/archives/182

2007年3月份的Download!雜誌介紹了一個專題:超限傳檔術,那什麼是超限傳檔術呢?必須具有底下三個特點:

# 免費

# 沒有一堆複雜的限制,單檔限制不能嚴苛,至少要給個1GB

# 上傳快速,至少要比MSN傳檔快上個1,2倍

一、 社群化分享服務:
# Tubes: http://www.tubesnow.com/
目前最容易使用的社群分享軟體之一。自己可以建立不同類別的Tube,傳檔方式非常直覺,只要將要分享的檔案丟在Tube圖示上就可以了。但只能在Windows上使用。 傳檔雙方不必同時上線。(目前的 Beta 版本似乎不支援 Win2000)

# BoxCloud: http://www.boxcloud.com/
沒有Tubes快,也沒有Tubes直覺,但卻是跨平台的喔~Windows跟Mac的使用者皆可使用。傳檔雙方不必同時上線。

# Zapr: http://www.zapr.net/
和BoxCloud相似,但需要傳檔雙方皆在線上才可以傳輸。

二、網頁式的檔案上傳:
# FileHO! http://www.fileho.com/
# GigaSize http://www.gigasize.com/
# MyOtherDrive http://www.myotherdrive.com/
# Up-File.com http://www.up-file.com/
# MegaShares http://www.megashares.com/

三、與系統整合的網路空間
會提供小程式,讓網路空間變成網路硬碟,只需利用拖拉檔案的方式,就可以方便的上傳下載檔案。
# Xdrive (http://www.xdrive.com/)
# Omnidrive ( http://www.omnidrive.com/)
# Drive Headquarters (http://www.drivehq.com/)

四、E-mail傳檔法:
# Lycos Mail (http://mail.lycos.com/)
附檔容量不超過3G都可以寄出去
# SendThisFile (http://www.sendthisfile.com/)
TransferBIGFiles.com (http://transferbigfiles.com/)
# Pando (http://www.pando.com/)
將特殊格式的種子寄給收件人後,收件人再利用Pando軟體下載。單檔限制1G。
# PodMailing.com (http://www.podmailing.com/)
跟Pando運作模式相似,沒有單檔限制。

速度最快的前五名: Xdrive, Drive Headquarters, Podmailing.com, SendThisFile, Tubes
速度快慢的前五名: Up-File.com, FileHo!, Lycos Mail, GigaSize, Pando

詳情可以參考2007年3月的Download!雜誌~

原來不想說破的不只我

今天很難得見到許久不見的史老師出現公司,
但就在下班前,收到了一封老師寄給大家的信,
原來史老師要離職了,當初的CPA團隊也就只剩我一人了!!

下班要載VIVI回家時又和老師在G2000巧遇,
趁機問了老師為何要離職,其實原因應該很容易猜到,
老師可是個工作狂呀!!
老師一看到我和VIVI在一起,當然不客氣的問了許多問題,
我告知了安全帽的事,老師也猜到了我對VIVI有好感!!

後來在MSN上,老師有開示,
女方知不知道男方對她有好感,
又或者是女生方知道,但因不想破壞現狀,
所以沒有說破….

或許正如老師所述,我只是個司機而已!!

加上最近和VIVI的互動,又讓我受到很大的打擊,
讓我很想問VIVI,我在她心中占了什麼樣的地位,
但卻感覺自貶身份,還是平常心面對吧!!

mysql4,mysql4.1,mysql 5共存

由於工作需要,要按這三個玩意。因為舊系統用MYSQL 4,而MYSQL 4.1多了比如外鍵功能,
MYSQL5 更是多了存儲過程等東西,因此嘗試共存在一機器上。
其實很簡單,
mysql 4.1MYSQL 5的安裝包已經非常自動化了,但要注意設置好不同的埠。
比如
mysql 4偶用的是3306,MYSQL 4.1我用3308MYSQL5偶用3309,安裝時,都選擇都安裝成為WINDOWS的服務。

之後是管理拉,一向推薦用phpmyadmin的,但這次比較麻煩,要建立多兩個目錄,
一個是管理
mysql 4.1的,一個是管理mysql 5的,分別叫做phpmyadmin41,phpmyadmin5
注意更改
config,.php中的
$cfg[‘Servers’][$i][‘port’] = ‘3309’;
這裏為相應的埠
然後還要注意的是,mysql 4.1mysql 5都改了認證方式,因為,先分別在DOS下連上mysql 4.1mysql 5,
之後,都用這樣的方式進行修改

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(‘newpwd’)
-> WHERE Host = ‘some_host’ AND User = ‘some_user’;
mysql> FLUSH PRIVILEGES;
之後在用IE,分別用如
http://localhost:8081/phpmyadmin4
http://localhost:8081/phpmyadmin41
http://localhost:8081/phpmyadmin5,
就可以很容易地管理這三個MYSQL