Presentation is loading. Please wait.

Presentation is loading. Please wait.

第14章 網站的個人化資訊 14-1 ASP.NET的個人化程序 14-2 使用Cookies建立個人化

Similar presentations


Presentation on theme: "第14章 網站的個人化資訊 14-1 ASP.NET的個人化程序 14-2 使用Cookies建立個人化"— Presentation transcript:

1 第14章 網站的個人化資訊 14-1 ASP.NET的個人化程序 14-2 使用Cookies建立個人化
14-3 Profile的個人化資訊 14-4 ASP.NET的電子郵件處理 14-5 客戶端的檔案上傳 14-6 ASP.NET網頁行事曆

2 14-1 ASP.NET的個人化程序-說明 對於網站內容的龐大資訊來說,我們除了替網站資訊進行分類管理外,網站應該提供個人化功能,可以讓會員存取有興趣資訊,並且設定喜好外觀來建立個人風格的資訊平台。 個人化的最終目的是提供個人化網路經驗,網站能夠提供使用者網路使用經驗,例如:在Amazon買書時,網站能夠提供喜好圖書的建議清單,這是從會員網路消費經驗中,所分析出的網路經驗。

3 14-1 ASP.NET的個人化程序-功能 識別使用者的身份:網站需要能夠識別出是匿名使用者或網站會員,並且提供機制可以監控會員在瀏覽網站過程中的需求,以便馬上提供回應。當然網站必須擁有會員管理功能,可以新增和管理使用者。 儲存使用者相關資訊:網站除了儲存使用者資料外,還需要儲存網路使用經驗的喜好和記錄資料,例如:色彩、外觀、有興趣主題、瀏覽或購買的商品清單等。 提供個人化經驗:個人化經驗除了依照使用者身份來提供不同存取權限外,還包含自訂畫面、追蹤使用瀏覽經驗和消費資訊等。

4 14-2 使用Cookies建立個人化-說明 每位進入網頁的使用者對於網頁色彩都有個人偏好,活用Cookies就可以讓使用者設定喜歡的網頁色彩,提供網頁個人化色彩的選擇。 在本節的程式範例和第4章Response物件建立Cookie的方法不同,筆者是使用HttpCookie類別。

5 14-2 使用Cookies建立個人化-建立HttpCookie物件
在Page_Load()事件處理程序建立HttpCookie物件的Cookie,如下所示: Dim Cookie As HttpCookie=New HttpCookie("personal") 程式碼建立名為personal的HttpCookie物件(即Name屬性值),然後使用Values屬性取得Key鍵名的集合物件,如下所示: Cookie.Values.Add("TitleBgColor","Maroon") Cookie.Values.Add("TitleForeColor","white") Cookie.Values.Add("ForeColor","green") ………

6 14-2 使用Cookies建立個人化-HttpCookie類別的屬性
HttpCookie類別的相關屬性,如下表所示:

7 14-3 Profile的個人化資訊 14-3-1 定義Profile物件的屬性 14-3-2 Profile物件的簡單屬性
匿名個人化

8 定義Profile物件的屬性- 說明 Profile物件是ASP.NET 2.0版的新功能,可以取代Session物件來追蹤使用者狀態。 Profile物件的屬性是在Web組態檔web.config定義,它是Web應用程式希望儲存的使用者專屬資料。在ASP.NET系統提供相關機制,預設是SQL Server Express資料庫,可以自動在跨網頁瀏覽時,讓ASP.NET程式存取Profile物件儲存的資料。

9 14-3-1 定義Profile物件的屬性- 定義Profile物件的屬性1
Profile物件屬性是在Web組態檔web.config的<profile>標籤定義,位在<profile>標籤的enabled屬性為true,表示啟用Profile。 在<properties>標籤使用<add>子標籤來新增Profile物件的屬性,以此例是名為Name的屬性,其相關屬性說明,如下表所示:

10 14-3-1 定義Profile物件的屬性- 定義Profile物件的屬性2
<profile enabled="true"> <properties> <add name="Name" defaultValue="Huey-An Chen" type="String"/> <group name="Student"> <add name="StudentId" type="Int32"/> <add name="Name" type="String"/> <add name="Score" type="Int32"/> </group> ……… </properties> </profile>

11 14-3-1 定義Profile物件的屬性- Profile物件與Membership機制
Profile物件與Membership機制擁有密切關係,因為Profile物件儲存的資料,預設是針對指定會員儲存的資料,如此,當會員登入網站後,系統才能依據登入會員從資料庫取出對應的Profile物件。

12 14-3-1 定義Profile物件的屬性- Profile物件與Session物件的差異
第11章的Session物件也可以儲存會員的使用者資訊,不過,Session物件儲存的資料只在目前Session期間有效,當Session期間結束,下一次進入Web應用程式時,仍然需要重新輸入這些資料,資料並不會自動保留。 Profile物件能夠自動將使用者資料儲存在永久儲存媒體,預設是SQL Server Express資料庫,當下一次進入Web應用程式時,上一次進入建立或修改的Profile資料能夠自動取出,並且自動維護這些資料。

13 14-3-2 Profile物件的簡單屬性-定義屬性
Profile物件的簡單屬性是指儲存單一資訊的屬性,在web.config檔案定義Name簡單屬性,如下所示: <properties> <add name="Name" defaultValue="Huey-An Chen" type="String"/> ……… </properties>

14 14-3-2 Profile物件的簡單屬性-存取屬性值
在ASP.NET程式可以存取Profile物件的屬性值,如下所示: msg.Text = Profile.Name Profile.Name = name.Text 上述程式碼分別取出和設定Profile物件的Name屬性,因為Profile物件屬性會持續存在,換句話說,我們可以在跨網頁瀏覽時,讓ASP.NET程式存取Profile物件儲存的資料。

15 14-3-3 Profile物件的群組屬性-定義屬性
Profile物件的群組屬性儲存的是一組資訊,在web.config檔案已經定義Student群組屬性來儲存學生資訊,如下所示: <properties> <group name="Student"> <add name="StudentId" type="Int32"/> <add name="Name" type="String"/> <add name="Score" type="Int32"/> </group> ……… </properties>

16 14-3-3 Profile物件的群組屬性-存取屬性值
ASP.NET程式可以存取Profile物件的屬性值,如下所示: no.Text = Profile.Student.StudentId name.Text = Profile.Student.Name score.Text = Profile.Student.Score 上述程式碼取出Profile群組屬性Student的學生資訊StudentId、Name和Score。

17 匿名個人化-說明 匿名個人化(Anonymous Personalization)是讓沒有登入網站的使用者都能擁有個人化功能,一般來說,我們會使用Cookie儲存匿名使用者的相關資料,來達成匿名個人化的功能。

18 匿名個人化-啟用 ASP.NET的Profile物件也能夠儲存匿名使用者的相關資料(不需登入網站),它是使用GUID(Globally Unique Identifier)來識別匿名使用者,換句話說,它可以取代Cookie功能。在web.config檔案啟用匿名使用者識別,如下: <anonymousIdentification enabled="true"/> 上述標籤的enabled屬性為true,表示啟用匿名使用者識別。如此,我們就可以定義匿名使用者的Profile屬性,如下所示: <add name="WishList" allowAnonymous="true" type="System.Collections.ArrayList"/>

19 匿名個人化-實作 匿名個人化在實作上可以建立購物網站的喜愛商品清單,或是購物車功能,使用者在尚未登入網站前,就可以選擇商品清單,等到登入網站後,將匿名選擇的清單整合至會員的Profile物件。 ASP.NET程式是使用Button控制項的AddWishList()和RemoveWishList()事件處理程序來新增和刪除喜愛商品清單的集合物件,如下所示: Profile.WishList.Remove(book.Text) Profile.WishList.Add(book.Text)

20 14-3-4 匿名個人化-合併匿名使用者的Profile物件(說明)
當匿名使用者登入網站,其選擇的清單就需要合併至會員Profile的屬性,在Global.asax檔案需要新增Profile_MigrateAnonymous()事件處理程序來合併匿名使用者的Profile物件。

21 14-3-4 匿名個人化-合併匿名使用者的Profile物件(範例)
Sub Profile_MigrateAnonymous(ByVal Sender As Object, _ ByVal E As ProfileMigrateEventArgs) Dim anonymousProfile As ProfileCommon = _ Profile.GetProfile(E.AnonymousId) If anonymousProfile IsNot Nothing AND _ anonymousProfile.WishList IsNot Nothing Then Dim enum1 As IEnumerator = _ anonymousProfile.WishList.GetEnumerator() Do While enum1.MoveNext() Profile.WishList.Remove(enum1.Current) Profile.WishList.Add(enum1.Current) Loop End If End Sub

22 14-4 ASP.NET的電子郵件處理 14-4-1 Web表單的電子郵件寄送 14-4-2 資料庫的大量郵件寄送
取得POP 3未讀取的郵件數

23 14-4-1 Web表單的電子郵件寄送-匯入名稱空間
在ASP.NET 2.0版寄送電子郵件是使用System.Net.Mail名稱空間(2.0版新增的名稱空間)的MailMessage、MailAddress和SmtpClient類別,在程式開頭匯入此名稱空間,如下所示: Import Namespace="System.Net.Mail" %> 在匯入名稱空間後,就可以使用MailMessage和MailAddress類別建立電子郵件內容,然後使用SmtpClient類別寄送郵件。

24 14-4-1 Web表單的電子郵件寄送-建立MailMessage物件
Dim mail As MailMessage = _ New MailMessage() 上述程式碼建立名為mail的MailMessage物件後,就可以設定物件的相關屬性來建立郵件內容。

25 14-4-1 Web表單的電子郵件寄送-MailMessage物件屬性

26 14-4-1 Web表單的電子郵件寄送- SmtpClient類別屬性方法
在建立好MailMessage物件後,就可以建立SmtpClient物件來指定SMTP伺服器,其相關屬性如下表所示: 使用Send()方法寄出郵件,如下表所示:

27 14-4-2 資料庫的大量郵件寄送- ListUsers資料表
對於網站電子郵件廣告或電子報等大量郵件的寄送,可以使用資料庫儲存收件者的電子郵件地址,然後透過ASP.NET郵件功能來寄送大量的電子郵件。 Access資料庫【ListServer.mdb】內含ListUsers資料表,欄位【User 】是電子報訂閱者的電子郵件地址,如下所示:

28 14-4-2 資料庫的大量郵件寄送- sendEmail()程序
Sub send (objBcc As MailAddressCollection, _ Subject As String, Body As String) Dim mail As MailMessage = New MailMessage() mail.To.Add(New Dim enum1 As IEnumerator = objBcc.GetEnumerator() Do While enum1.MoveNext() mail.Bcc.Add(enum1.Current) Loop mail.From = New mail.Subject = Subject mail.Body = Body Dim smtpServer As New SmtpClient() smtpServer.Host = "ms2.hinet.net" smtpServer.Send(mail) End Sub

29 14-4-2 資料庫的大量郵件寄送-建立MailAddressCollection物件
使用ADO.NET的DataReader物件來讀取資料表的記錄資料,其主要目的是將電子郵件地址新增至MailAddressCollection集合物件,如下所示: objDataReader = objCmd.ExecuteReader() Dim objBcc As New MailAddressCollection Do While objDataReader.Read() If objDataReader.IsDBNull(objDataReader. _ GetOrdinal("User ")) = False Then str = objDataReader.Item("User ") msg.Text &= "寄送郵件到: <b>"& _ str &"</b><br>" objBcc.Add(New MailAddress(str )) End If Loop

30 取得POP 3未讀取的郵件數-說明 在ASP.NET程式建立System.Net.Sockets名稱空間的TcpClient類別後,就可以透過TCP/IP指定埠號來連接常用的Internet服務,例如:FTP是21、WWW是80,SMTP是25和POP 3的110。

31 14-4-3 取得POP 3未讀取的郵件數-建立TcpClient物件
Dim mailClient As TcpClient = New TcpClient() 關於TcpClient物件建立連線和取得串流的方法,如下表所示:

32 14-4-3 取得POP 3未讀取的郵件數-建立POP 3郵件伺服器的連線
Try mailClient.Connect(host, 110) Catch e As Exception msg.Text = "連結郵件伺服器錯誤: " & _ e.Message & "<br>" Exit Sub End Try 程式碼建立遠端主機的連線後,使用GetStream()方法取得串流物件,如下所示: ns = mailClient.GetStream()

33 14-4-3 取得POP 3未讀取的郵件數-計算郵件數
ASP.NET程式是使用sendCommand()方法來送出指令,當送出郵件帳號和密碼成功登入伺服器後,就可以送出stat指令計算郵件數,如下所示: responseMsg = sendCommand( _ ns, "stat" & vbCrLf) Dim msgArray() As String msgArray = responseMsg.Split(" ") Dim numOfMsg As String = msgArray(1)

34 14-5 客戶端的檔案上傳 14-5-1 HtmlInputFile控制項與檔案上傳 14-5-2 顯示上傳檔案的資訊
同時上傳多個檔案 電子郵件的附檔處理 上傳圖檔到資料庫 顯示資料庫的圖片欄位

35 14-5-1 HtmlInputFile控制項與檔案上傳-HtmlInputFile控制項
ASP.NET程式可以使用HtmlInputFile控制項在客戶端選擇上傳檔案,其HTML標籤,如下所示: <input type="File" Id="filename" size="30" accept="image/*" Runat="server"/> 上述標籤是Input欄位,只是type屬性為File,可以顯示選取客戶端電腦檔案的欄位,如下圖所示:

36 14-5-1 HtmlInputFile控制項與檔案上傳-上傳表單
因為擁有HtmlInputFile控制項的Web表單是為了上傳檔案,所以在<form>標籤需要使用enctype屬性指定編碼方式,如下所示: <form enctype="multipart/form-data" Runat="server"> ………….. </form> 上述enctype屬性指定上傳檔案的編碼方式。

37 14-5-1 HtmlInputFile控制項與檔案上傳-上傳檔案
在HtmlInputFile控制項filename選好上傳檔案後,上傳檔案資料會隨著網頁送回伺服端,在伺服端使用PostedFile屬性取得HttpPostedFile物件,如下所示: Dim file As HttpPostedFile = _ filename.PostedFile 然後使用SaveAs()方法寫成伺服端的檔案來完成檔案上傳,如下所示: file.SaveAs(up_path & "/" & _ Path.GetFileName(file.FileName))

38 顯示上傳檔案的資訊 HttpPostedFile類別的屬性可以取得上傳檔案資訊,其相關屬性如下表所示:

39 14-5-3 同時上傳多個檔案-HtmlInputFile控制項
<input type="File" Id="filename" size="30" accept="image/*" Runat="server"/><br> <input type="File" Id="filename1" size="30" <input type="File" Id="filename2" size="30"

40 14-5-3 同時上傳多個檔案-HtmlInputFile控制項
在選擇多個上傳檔案後,就可以在伺服端取得上傳檔案的集合物件,如下所示: Dim objFileCollection As HttpFileCollection objFileCollection = Request.Files 程式碼使用Request物件的Files屬性取得上傳檔案的HttpFileCollection集合物件。 在取得上傳檔案的集合物件後,就可以使用For/Next迴路取得每一個HttpPostedFIle物件。

41 14-5-4 電子郵件的附檔處理-上傳附檔 電子郵件如果擁有附檔,檔案需要先上傳到伺服端後,才能新增成為電子郵件的Attachment物件。
當輸入郵件內容且選擇附檔後,ASP.NET程式可以建立MailMessage物件和上傳附檔,如下所示: uploadFile = temp_path & "/" & _ Path.GetFileName(fileName.FileName) fileName.SaveAs(uploadFile)

42 14-5-4 電子郵件的附檔處理-新增附檔 在上傳郵件附檔後,就可以建立附檔的Attachment物件,如下所示:
Dim attachedFile As Attachment = _ New Attachment(uploadFile) attachedFile.Name=Path.GetFileName( _ fileName.FileName) mail.Attachments.Add(attachedFile)

43 14-5-5 上傳圖檔到資料庫-讀取上傳的圖片檔案資料
HttpPostedFile類別可以將圖檔視為串流檔案來讀取,在讀取圖檔內容後,即可使用參數的SQL指令來插入資料表,如下所示: Dim UpFile As HttpPostedFile = filename.PostedFile Dim imageStream As Stream = UpFile.InputStream 接著就可以讀取圖檔內容,如下所示: Dim fileLength As Integer = UpFile.ContentLength Dim buffer(fileLength) As Byte imageStream.Read(buffer, 0, FileLength) imageStream.Close()

44 14-5-5 上傳圖檔到資料庫-在資料庫插入擁有圖片檔案的記錄
現在我們已經讀取上傳圖檔內容,接著就可以建立參數SQL字串來插入記錄,在Command物件關於圖檔部分的參數,如下所示: objCmd.Parameters.Add(New OleDbParameter( _ OleDbType.VarBinary)) OleDbType.VarChar, 50)) 然後就可以指定參數值,如下所示: = buffer = _ UpFile.ContentType

45 顯示資料庫的圖片欄位 ASP.NET程式範例Ch aspx使用資料來源控制項取得Products資料表的記錄資料,然後使用GridView控制項以表格方式顯示記錄資料。

46 14-6 ASP.NET網頁行事曆 Calendar控制項 ASP.NET網頁行事曆

47 Calendar控制項-標籤 Calendar控制項可以在網頁顯示萬年曆,並且提供屬性來指定月曆顯示方式,或以事件處理執行日期相關操作。其使用方式很簡單,如果沒有設定屬性,就以預設值來顯示萬年曆,如下所示: <asp:Calendar Id="calendar" Runat="server"/>

48 Calendar控制項-控制項屬性 Calendar控制項是System.Web.UI.WebControls名稱空間的Calendar類別,提供相關屬性來顯示不同的萬年曆外觀,如下所示: <asp:Calendar Id="calendar" Runat="server" OnSelectionChanged="SelectedRange" OnVisibleMonthChanged="MonthChange" Height="200px" Width="500px" TitleStyle-BackColor="Maroon" TitleStyle-ForeColor="White" ……… NextPrevStyle-ForeColor="white" NextPrevStyle-Font-Size="18px" SelectWeekText="選星期" SelectMonthText="選月份"/>

49 Calendar控制項-控制項事件 Calendar控制項提供3個事件,可以使用OnDayRendar、OnSelectionChanged和OnVisibleMonthChanged屬性指定事件處理程式。事件說明如下表所示:

50 14-6-2 ASP.NET網頁行事曆-取得事件記錄的二維陣列
在Calendar控制項的日期儲存格可以顯示事件記錄,ASP.NET程式是在Page_Load()事件處理程序,使用二維陣列來儲存事件記錄,如下所示: Dim eventDays(12,31) As String 上述程式碼宣告整年日期的二維陣列,第一維是月份,第二維是日期,如下所示: eventDays(1,10) = "目前進度是14章" eventDays(1,31)= "完成前16章" eventDays(2,28)= "本書交稿日"

51 14-6-2 ASP.NET網頁行事曆-顯示事件記錄的DayRender事件
Sub EventDayRender(Sender As Object, _ E As DayRenderEventArgs) Dim currDay As CalendarDay = E.Day Dim currCell as TableCell = E.Cell If currDay.IsOtherMonth Then ' 是否是此月份 currCell.Controls.Clear() ' 清除資料 Else ' 建立儲存格內容 Try Dim description As String = eventDays( _ currDay.Date.Month, currDay.Date.Day) If description <> "" Then currCell.Controls.Add(New LiteralControl( _ "<br><font size=2>"& description &"</font>")) End If Catch err As Exception msg.Text = err.ToString() End Try End Sub

52 14-6-2 ASP.NET網頁行事曆-編輯事件記錄的SelectionChanged事件
當使用者選取指定日期,就會觸發SelectionChanged事件,其事件處理程序為SelectedDate(),如下所示: Sub SelectedDate(Sender As Object, _ E As EventArgs) msg.Text = "選擇的日期: " & _ calendar.SelectedDate.ToShortDateString() End Sub


Download ppt "第14章 網站的個人化資訊 14-1 ASP.NET的個人化程序 14-2 使用Cookies建立個人化"

Similar presentations


Ads by Google