2008年7月16日 星期三

該學ASP或是ASP.NET?....從「驚見一本ASP新書上市」說起

該學ASP或是ASP.NET?....從「驚見一本ASP新書上市」說起

我的ASP.NET學習地圖(給初學者、入門參考),如何變成Web程式設計師?

我的ASP.NET學習地圖(給初學者、入門參考),如何變成Web程式設計師?

VMware,讓你的電腦虛擬化。同時安裝多個作業系統。

VMware,讓你的電腦虛擬化。同時安裝多個作業系統。

[轉貼]IT虛擬化(資料來源:ithome)

單一檔案(Inline Code)與後置程式碼(Code Behind)

單一檔案(Inline Code)與後置程式碼(Code Behind)

[微軟文件]保護 ASP.NET 網站

[微軟文件]保護 ASP.NET 網站

宅男行銷學?正妹產品風?

宅男行銷學?正妹產品風?

常用的 HttpSessionState屬性

常用的 HttpSessionState屬性

如何在移除並重新安裝 IIS 之後,修復 .NET Framework對應(Mapping)

如何在移除並重新安裝 IIS 之後,修復 .NET Framework對應(Mapping)

[錯誤訊息]Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.

[錯誤訊息]Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.

[轉貼]MS SQL Server的T-SQL指令、Stored Procedure與Trigger

[轉貼]MS SQL Server的T-SQL指令、Stored Procedure與Trigger

不同語系的轉碼、編碼 / HttpUtility.UrlEncode,Server.UrlEncode兩者差異

[自己的經驗談] 油價高漲,省油DIY,省油秘訣

開車想要省油,其實要看自己的開車習慣。

關於省油的問題,我親身經驗不錯,請您參考。

不需要安裝什麼省油設備啦!那些錢省下來加油(當成油錢),還比較實際
想要省油,沒有秘訣啦。參考一下我的方法:


[自己的經驗談] 油價高漲,省油DIY,省油秘訣

2008年6月2日 星期一

ASP.NET的免費資源

ASP.NET的免費資源

[免費下載]Visual Studio 2008(90天試用版)

[免費下載]Visual Studio 2008 and .NET 3.5 Training Kit

[免費下載]ASP.NET MVC

跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #2

跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #2

上一篇文章,介紹過第一種方法(跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #1)。
目前要介紹的是第二種方法:

以下是即將出版的新書內容:
題目跟剛才一模一樣。只是解法不同。
========================================================
假設我們有一個網頁程式,要輸入日期。
另外一個網頁程式,會有日曆控制項。
點選後,日期會自動傳回去。
(抱歉,有幾張圖片來解釋可能比較清楚。But......大家忍耐一下,這東西不難。)
========================================================
以下是即將出版的新書內容:
作法如下:
而本範例(3.aspx)就得透過 Public屬性來完成相同的功能。簡單的說,3.aspx提供了一個「公開的」日曆控制項「屬性」,可以讓別的網頁來讀取。這樣一來,也可以完成跨網頁張貼(Cross-Page Posting)。
3.aspx原始網頁的HTML畫面設定,跟上一節的 1.aspx完全一樣。在此不贅述。但是 3.aspx的後置程式碼,有很大的變化,請注意:

Partial Class test_ADO_NET_3_get
Inherits System.Web.UI.Page

'=====透過 Publlic屬性,來作 Cross-Page Posting。=====
‘ 別的網頁才能讀取這個公開的資訊
Public ReadOnly Property my_Calendar() As Calendar
‘-- 註解:ReadOnly指出:這個公開的屬性,只能被讀取而已。這樣較安全!
Get
Return Calendar1
End Get
End Property


Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = Calendar1.SelectedDate.Date.ToShortDateString
'--把選取的日期,以「短日期格式」來呈現。
End Sub
End Class

這個範例,比較特別的是第二支程式(4.aspx,目的地網頁),請注意!HTML畫面原始檔多了一行設定「<%@ PreviousPageType VirtualPath="3.aspx" %>」,用來讀取 “上一個網頁” 的公開資訊。

設定「<%@ PreviousPageType VirtualPath="3.aspx" %>」這一行,除了鎖定「上一個網頁」的檔名與位置,也限制了接收資訊的網頁(4.aspx,目的地網頁)不能任意使用其他網頁的資訊,全都是為了安全起見。4.aspx的後置程式碼如下:


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = PreviousPage.my_Calendar.SelectedDate.ToString
End Sub

本節範例的執行結果,跟上一節完全相同,但卻有兩種不同作法




.............................................................................................
微軟官方文件有更詳細的說明(以下是中文的文件),微軟稱「Cross-Page Posting」為「跨網頁公布」
http://msdn.microsoft.com/zh-tw/library/ms178139.aspx

跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #1

跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #1

跨網頁張貼(Cross-Page Posting),簡單的說,就是「網頁A」要把資料傳給「網頁B」。
以前在ASP時代,我們可以用隱藏欄位,例如: ,或是 Session(工作階段)來處理。
而ASP.NET 2.0開始,微軟有新的方法提供給大家。
以下是即將出版的新書內容:
========================================================
假設我們有一個網頁程式,要輸入日期。
另外一個網頁程式,會有日曆控制項。
點選後,日期會自動傳回去。
(抱歉,有幾張圖片來解釋可能比較清楚。But......大家忍耐一下,這東西不難。)
========================================================

作法如下:
程式 1.aspx的按鈕(Button2)控制項,「PostBackURL」屬性要設定第二支程式的檔名(2.aspx)或URL。

Text="Button2_日期出現在下一頁(2.aspx)" />

2.aspx(目的地網頁),畫面上只有一個Label控制項而已。
因為要承接上一個網頁傳來的資料,所以 2.aspx的後置程式碼很重要!寫法如下:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim my_Calendar As Calendar
my_Calendar = CType(PreviousPage.FindControl("calendar1"), Calendar)
‘-- 註解: CType(A, B)是把 A強制轉換成 B的型態。
PreviousPage.FinControls(“控制項的ID”),是指:承接「上一個網頁」傳來的「控制項」。

Label1.Text = my_Calendar.SelectedDate.ToString
End Sub

========================================================
以下是即將出版的新書內容:
上面這種作法,有何好處?我用以前ASP時代的老方法,也能完成相同的功能啊。
恩恩....您說得對。但在安全上,有很大的改進。
當使用者不是經過原始網頁(1.aspx),而直接進入第二支目的地網頁(2.aspx)時,PreviousPage屬性為 Null參照 (即 Visual Basic語法中的 Nothing)。
如此可以避免有人不照流程來使用此功能,直接進入第二支程式的下場,就是Null(空空如也)。


微軟官方文件有更詳細的說明(以下是中文的文件),微軟稱「Cross-Page Posting」為「跨網頁公布」
http://msdn.microsoft.com/zh-tw/library/ms178139.aspx

另外一種作法,我們下次再談.............
請看下一篇文章(介紹第二種方法)http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/26/4123.aspx

2008年5月21日 星期三

AJAX與ListView的怪現象? --樣版內,控制項ID重複的問題

AJAX與ListView的怪現象? --樣版內,控制項ID重複的問題

這個問題也是我在MSDN論壇回答過的。http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3125960&SiteID=14

Q :ListView裡面的各種樣版,以 ItemTemplate 與 AlternatingItemTemplate這兩個樣版最類似。
如果加上AJAX功能,在這兩個樣版內部,各自加上 UpdatePanel。
很奇怪的是----執行時,會出現錯誤訊息。說 [控制項ID重複?]
取消AJAX的UpdatePanel之後,又好了?真的很奇怪!

重新看了 ListView與SqlDataSource,自動幫我產生的樣版內容(HTML碼)。
沒錯。,這兩個樣版的內容一模一樣啊
不光如此,ListView的各種樣版,裡面各種的 TextBox,ID都是一樣的。
為何不會有錯?但加上AJAX的UpdatePanel就會出錯呢?
...................................................................................................................................

A : 這問題很有趣,所以我也自己測試了一下。
手動去修改 ListView裡面,每個樣版內的 [控制項ID],不要重複就好了。我試過,可以正常執行
我個人的認知如下,未必正確。
傳統POSTBACK的作法,一次只會啟動一個樣版,
所以 ListView各種樣版底下的控制項ID,就算重複也無所謂。
但改成AJAX之後,這時候,每一個控制項ID都必須獨一無二,
不然的話,要怎麼知道是哪一個控制項啟動了非同步的POSTBACK?
我覺得這說法,好像說得通


以上問答,是我在MSDN回答過的問題。
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3125960&SiteID=14
今天又看見它上了最常查詢問題的排行榜。
所以收錄回自己的BLOG裡面

File 與 Log #2----訪客計數器(用.txt檔案來記錄)

File 與 Log #2----訪客計數器(用.txt檔案來記錄)


以下是即將發表的新書內容:
網站的訪客計數器,也可以用檔案的方式來撰寫。這支程式(Counter.aspx)很簡單也很短,就算您看不懂程式碼,直接 Copy過去用也可以執行。而且執行的結果是以圖片的方式來呈現數字


數字圖片,放在本章範例的 image目錄底下。例如:1的圖片,就名為1lcdb0,gif。2的圖片,就名為2lcdb0,gif……以此類推。

01 Imports ...System.IO
02
03
04
05 Partial Class _Book_My_Files_Counter
06
07 Inherits System.Web.UI.Page
08
09
10
11 Protected Sub Page_Load() Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
12
13 '====讀取檔案 (務必修改這個檔案的權限,需要「寫入」的權限)====
14
15 Dim sr As New StreamReader(Server.MapPath("counter.txt"))
16
17
18
19 '--把檔案內, 原本的訪客人數[加一]
20
21 Dim visitors As String = sr.ReadLine()
22
23 visitors = CInt(visitors) + 1
24
25
26
27 '--把訪客人數(數字) 轉換成 [圖片]展示在畫面上
28
29 Dim Length As Integer = Len(visitors) '--計算訪客人數的[字串長度]
30
31 Dim strURL As String = ""
32
33
34
35 While Length >= 1
36
37 '--訪客人數的每一位數字,都用圖片來呈現。
38
39 strURL = "" & strURL
40
41 Length = Length - 1
42
43 End While
44
45 sr.Close()
46 sr.Dispose()
47
48
49
50 '====寫入檔案,紀錄最新的訪客人數==================
51
52 Dim sw As New StreamWriter(Server.MapPath("counter.txt"))
53
54 sw.WriteLine(visitors) '--找不到檔案也不會出現錯誤訊息,而且會自動新增一個檔案。
55
56 sw.Close()
57 sw.Dispose()
58
59
60 Label1.Text = strURL
61
62 End Sub
63
64 End Class



上面的程式中,比較困難的是 While迴圈的部份。假設訪客人數(visitors)為 999998,我們必須先確定這字串的長度為6(Len(visitors))。然後一個一個地把數字,用圖片的HTML碼()來取代。
我們用一個文字檔來進行記錄,把訪客的參觀數字,記錄在這個檔案(counter.txt)裡面。重點是:務必把這個檔案的權限,設定為「可寫入」。這樣才能每次累計加一,記錄訪客人數。

HTML用來展示圖片的標籤,寫法是:
本範例counter.aspx的後置程式碼很簡單,裡面只作了兩件事而已。第一是讀取counter.txt檔案,取出原本的訪客人數。第二,是把人數加一,然後以圖片方式展現在畫面上,再把更新後的數字寫入檔案。

File 與 Log----ASP.NET的檔案與I/O Stream

File 與 Log----ASP.NET的檔案與I/O Stream
舉例來說,尚未上線的系統、或是有些功能繁雜的程式要撰寫。我們就可以利用檔案的功能來做紀錄。一邊測試一邊記錄這些程式在各階段的運作狀況,每個階段成功與否都可以直接寫入文字檔裡面,不需要跟資料庫搶資源、搶連線。畢竟小檔案I/O的速度,一般來說都快過資料庫。
以前我做過B2B的案子,用Rosettanet XML來傳遞資料(關於Rosettanet,請看中文網站的說明,http://www.rosettanettaiwan.org.tw/)。當時用的技術是 VB 6.0 + ASP + MS BizTalk Server + MS SQL Server 2000。
依照實際的狀況,我們會同時用「檔案」與「資料庫」來記錄這些流程。底下的五大步驟,前三項都會用文字檔做紀錄,因為這些小資料是自己Debug(除錯)用的,往往是系統出問題才會去察看,也不太有保留的價值,所以我們採用文字檔來記錄。
1. 程式定時啟動(例如:每五分鐘啟動一次),並開始記錄處理流程。2. 從資料庫搜尋資料。符合條件的紀錄就撈出來,組合成XML檔案。(執行時間與XML檔案都會存成文字檔,存在專有的目錄底下)3. 將XML檔案,轉換成 Rosettanet格式。(執行時間與Rosettanet XML檔案都會存檔,放在專有的目錄底下)4. 交給 Server準備發送。此時,就會用資料表來記錄時間與相關資料了。5. 傳送給對方的Server。對方收到後,我們也會把時間記錄在資料表裡面。註解:後面兩個流程要用資料表來做紀錄,是為了給客戶與主管查驗,日後也能統計與分析我們這套B2B系統的發送成功率等等。
除了大型的系統、複雜的程序需要做Log紀錄檔之外,網站常用的「訪客計數器」,也可以用檔案的方式來控管。可見存取檔案的用法,真的很多樣化。

以下是即將發表的新書內容:


Q:每一天都用一個檔案,用來記錄當天每支程式內部的執行狀況。
以下是相關的規範:

1. 檔案統一放在 C:\MIS2000Lab_ASP.NET_Log目錄底下。
2. 每一天都用一個單獨的子目錄,子目錄名稱就是當天日期。
3. 檔名必須是以當天日期為名,副檔名是.log,例如:20081231.log。
4. 檔案內每一段訊息,都要記錄完整的日期與時間(年/月/日/時/分/秒)。
每段訊息各自獨立一行,格式如下:
[2008/04/01 14:00:33] Message: 錯誤訊息XXXYYY
5. 檔案內的文字,採用 Big5正體中文來編碼。


記錄檔案的後置程式碼如下,其實不難,大部分都學過了。程式碼請看這裡----http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/19/4034.aspx

推薦好書----深入淺出C# (歐萊禮,O'Relly)。很適合初學者與新鮮人~

推薦好書----深入淺出C# (歐萊禮,O'Relly)。很適合初學者與新鮮人~


市面上有些電腦書寫的很不錯。
英文原文書當然沒話講,或許是語言的關係,他們寫技術文件比較單刀直入,一目了然。

後來我發現國內的出版社,也引進一些「日文翻譯書」。日本人也是好樣的!
他們不說廢話,書裡面都是很實用的範例。也讓我印象很深刻。
例如:入門SQL(博碩)、ASP.NET語法範例字典 / SQL語法範例字典(旗標)。這幾本日文翻譯書都超讚!
很務實,學到的東西都很實用!

以前有一陣子,英文書有一系列的 XXX for Dummy (http://www.amazon.com/ASP-NET-Dummies-Bill-Hatfield/dp/0764508660)。
國內也出版過翻譯本,這些書籍都很淺顯,初學者很能接受。
有一家出版社,名為PC User,他們出版的書也是走向這類型,淺顯易懂。

昨天去逛書店,看見「深入淺出C# (歐萊禮,O'Relly)」http://www.oreilly.com.tw/product2_others.php?id=a230
這一系列的書(名為 Head First XXX),也是很淺顯。
最特別的是:這系列的書本,裡面圖片比文字還多!排版方式也很[動感]!
缺點就是「貴!」,中譯本比一般國產電腦書還貴兩百元左右。

但內容很有趣,就如同書裡講的「很適合程式設計的新鮮人、初學者」。
隨手翻翻,就看完一大半。但是.....這種搞笑的語句、大量圖片與插畫.....國內出版社的編輯人員 [似乎] 不太能接受
也可能書市慘澹,目前出版社主打學校教科書市場。教科書嘛!不能太輕鬆啦~要嚴肅一點點。

這一系列的書,(歐萊禮,O'Relly)將他中文化,出版好多本。PMP、SQL等等,內容包羅萬象。
都是鎖定「初學者」市場的。.............我看完之後,發覺--
除非我請漫畫家來合作,推出一本「看漫畫學ASP.NET」,不然的話很難贏過它了
(這不是開玩笑,日本有很多這種書籍,例如:看漫畫學XXX,都是電腦書喔!)

但是,不要小看這一本入門書喔!
該講都講了。包含:物件導向、型別&參考、封裝、繼承、介面與抽象類別、列舉&群集等等。
內容豐富得很~

很多初學者,買書就看「書店的排行榜」、「看人家推薦什麼」、「買最厚的一本」.....
說穿了,是買心安的。就跟初一十五去廟裡拜拜一樣(我當年也是如此)
慢慢的,我才發展出一套方法論,能夠「挑選適合自己程度的書」。
適合自己的書,未必適合別人。未必是暢銷書。
只要對自己有益!就是一本適合自己的好書!(意思雷同於:管他黑貓白貓,會抓老鼠就是好貓!)

.........................................................................................................................
(謎之聲:咦?你玩ASP.NET一段時間了,自己也出書,怎麼還買這樣的入門書來看呢?)
就如同我說過的(請看下面,我以前的PO文)----溫故知新。書本永遠看不完。
一本書,只要有一個範例、一章,讓我有感覺。那麼這五六百元的書錢,就沒有浪費!
~~~~寫程式所需要的參考書,沒有「一本就能搞定」的聖經!~~~~多多益善,開卷有益。

看見了一本有趣的好書,也跟大家分享一下 (^_^)
.........................................................................................................................
相關文章----如何挑一本好書,學習ASP.NET。個人觀點,非戰文。

[Info]Enterprise Library 4.0發佈了

今天一早就看見 LOLOTA前輩的文章----[Info]Enterprise Library 4.0發佈了
這東西是什麼啊?
也就是以前講的DAAB(全名Data Access Application Block ),
現在改名為 Patterns & Practices(或是稱為p&p),一般都稱為 Enterprise Library (EntLib)
以前在MSDN論壇也有討論過,請看這篇文章-- http://forums.microsoft.com/msdn-cht/ShowPost.aspx?PostID=2703042&SiteID=14

微軟MSDN裡面,有一個專區---- http://msdn.microsoft.com/zh-tw/practices/default(en-us).aspx

下載與說明:http://www.codeplex.com/entlib
沒記錯的話,他們是開放原始碼的,有興趣的人可以參考或是改寫。
安裝完成,就會在目錄底下看見一個原始碼(SourceCode)的目錄

如果您接手以前的程式,發現裡面常常有一個 SqlHelper()之類的東西。
沒錯,SqlHelper就是前身,您可以參考這篇中文文件(年代有點久):Microsoft Application Blocks for .NET

我們可以從這些地方,更瞭解 Enterprise Library(p&p)。
Get Started With p&p
What is p&p?
Who We Are and What We Do
Explore the p&p Catalog

小弟在 3.1版的時候,稍稍玩過(試了一下)Enterprise Library ,那時是搭配 .NET 2.0與VS 2005的。那時共有八大分類,「資料存取」僅僅是其中一類。
寫了一些ADO.NET的程式(DataReader與DataSet),跟Enterprise Library提供的比較一下
相同程式跑一萬次,來記錄執行時間。似乎手工自己寫ADO.NET比較快,平均時間都快了一秒。

有兩個範例要跟大家分享,因為這個BLOG張貼程式很醜,請您看這裡----http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/21/4091.aspx