Chương 1: ONLINE DIARY1S Ổ N H Ậ T K Ý T R Ự C T U Y Ế N..19 Chương 1: Online pot

36 358 0
Chương 1: ONLINE DIARY1S Ổ N H Ậ T K Ý T R Ự C T U Y Ế N..19 Chương 1: Online pot

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 1: ONLINE DIARY S Ổ N H Ậ T K Ý T R Ự C T U Y Ế N 19 Chương 1: Online Diary Q ua chương này, bạn tạo sổ nhật ký trực tuyến (online diary) trình quản lý danh bạ liên lạc (contacts manager) Vậy xác sổ nhật ký trực tuyến trình quản lý danh bạ liên lạc làm việc gì? Sử dụng giao diện dựa lịch biểu, bạn thêm, xóa, chỉnh sửa mục nhật ký cho ngày Bạn tạo kiện, chẳng hạn ghi nhớ ngày sinh người Các kiện khơng ngày sinh mà cịn họp, hẹn,… Hệ thống có hệ thống đăng nhập (gồm tên người dùng mật khẩu), để có bạn (chứ khơng khác) xem nhật ký bạn Đây điểm khác biệt so với blog Hệ thống trình quản lý danh bạ liên lạc nhật ký cá nhân—là nơi đặt suy nghĩ ghi mà bạn không muốn người nhìn thấy Cịn blog nơi bạn muốn tất người nhìn thấy Tồn dự án cho thấy sức mạnh ASP.NET 2.0 dễ dàng tạo nên dự án Đã qua thời phải viết hàng trăm dòng mã để thực đăng nhập, tạo người dùng mới, Chương tận dụng thành phần bảo mật ASP.NET 2.0 nhằm cho bạn thấy dễ dàng tạo nên dự án hữu ích thú vị Phần hướng bạn sử dụng sổ nhật ký hình Phần cho bạn nhìn tổng quan thiết kế hệ thống Sau đó, bạn bước vào thành phần hệ thống, cách kết hợp chúng với Trong phần cuối cùng, bạn cài đặt sổ nhật ký 1.1 Sử dụng Online Diary Mỗi người dùng có sổ nhật ký trực tuyến riêng, để truy cập cần phải đăng nhập Nhập tên người dùng demo với mật password# để đăng nhập làm người dùng thử Màn hình đăng nhập thể hình 1-1 Hình 1-1 Mặc dù hình gợi cho bạn nhiều điều kiểm nhiều mã lệnh tạo nên chức bảo mật, thật với điều kiểm bảo mật ASP.NET 2.0 việc trở nên dễ dàng chẳng có nhiều việc để làm 20 Chương 1: Online Diary Nếu bạn chưa đăng ký, liên kết Bạn chưa có tài khoản? Nhắp vào để đăng ký! đưa bạn đến trang đăng ký, mơ tả hình 1-2 Hình 1-2 Hình cho thấy điều kiểm khác số điều kiểm bảo mật ASP.NET 2.0; việc tạo quy trình đăng ký thêm điều kiểm vào form! Nếu quên mật khẩu, bạn nhắp vào liên kết Bạn quên mật khẩu?, bạn dẫn đến trang nhắc mật (xem hình 1-3) Hình 1-3 Sau đăng nhập, bạn đến trang nhật ký chính, hiển thị hình 1-4 Trên trang này, bạn thấy lịch biểu theo tháng Các ngày có mục nhật ký đánh dấu màu xanh Các ngày có kiện đánh dấu chữ màu đỏ Cũng để ý rằng, phía bên phải kiện tới mục nhật ký gần Nhắp vào ngày đưa bạn đến vùng nhập mục nhật ký cho ngày hơm đó; thêm, sửa, xóa kiện (xem hình 1-5) Bạn điều hướng sổ nhật ký từ lịch biểu nhỏ bên phải Thêm mục nhật ký cách nhập vào hộp Tiêu đề hộp Nội dung, sau nhắp nút Lưu nhật ký 21 Chương 1: Online Diary Hình 1-4 Hình 1-5 Các kiện diễn vào ngày cụ thể liệt kê góc hình 1-5 Bạn chỉnh sửa xóa kiện, nhắp vào liên kết Thêm kiện để thêm kiện Các trang sửa thêm kiện gần giống Hình 1-6 ví dụ trang sửa kiện Trong trang sửa kiện, bạn nhập tên kiện, mô tả ngắn kiện, thời gian bắt đầu kiện, kiện kéo dài 22 Chương 1: Online Diary Hình 1-6 Trở lại trang nhật ký (hình 1-4), bạn thấy liên kết Quản lý danh bạ liên lạc (xem hình 1-7) Hình 1-7 Nhắp vào liên kết này, bạn dẫn đến trang quản lý sổ liên lạc (xem hình 1-8) Hình 1-8 23 Chương 1: Online Diary Tại đây, bạn thấy danh sách liên lạc Bạn chỉnh sửa xóa liên lạc cách nhắp vào liên kết phù hợp Bạn thêm liên lạc cách nhắp vào liên kết Thêm liên lạc mới, liên kết dẫn bạn đến trang thêm liên lạc (xem hình 1-9) Hình 1-9 Hiện tại, chức danh bạ liên lạc đơn giản, khơng có chức liên kết kiện cá nhân, tự động gửi mail đến cá nhân danh bạ liên lạc để nhắc họ kiện Bạn thấy Online Diary làm được, bạn xem “đã làm điều nào” (câu nói quen thuộc chương trình truyền hình)! Phần mô tả thiết kế tổng quan hệ thống gắn kết với Bạn tìm hiểu sở liệu lớp mà hệ thống sử dụng 1.2 Thiết kế Online Diary Hệ thống nhật ký chia thành kiến trúc ba tầng Tất liệu mã lệnh hiệu chỉnh liệu trực tiếp nằm tầng truy xuất liệu—sự kết hợp bảng sở liệu thủ tục tồn trữ Phía tầng truy xuất liệu tầng nghiệp vụ, tầng cung cấp tất quy tắc tính thơng minh hệ thống Tầng nghiệp vụ tổ chức thành bảy lớp Được thảo luận sau tầng trình bày Tầng bao gồm số file aspx, sử dụng tầng nghiệp vụ tầng truy xuất liệu để tạo giao diện nhật ký 1.2.1 Tầng truy xuất liệu Online Diary sử dụng sở liệu SQL Server 2005 Express Tuy nhiên, khơng có lý khơng thể thay đổi sở liệu khác Nếu sở liệu hỗ trợ thủ tục tồn trữ theo lý thuyết, cần thay đổi chuỗi kết nối tạo thủ tục tồn trữ tương ứng với thủ tục tồn trữ có sở liệu SQL Server Nếu sở liệu không hỗ trợ thủ tục tồn trữ (chẳng hạn, MS Access) thay đổi mã lệnh cần thiết khơng khó 24 Chương 1: Online Diary Hình 1-10 mô tả bảng sở liệu Online Diary (DiaryDB) Hình 1-10 Cơ sở liệu mặc định tạo tính membership ASP.NET 2.0 sử dụng Để nối kết việc đăng nhập chi tiết nhật ký, trường UserName sở liệu DiaryDB phải lấy giá trị gốc từ sở liệu membership Các chi tiết membership nằm sở liệu ASPNETDB mà Visual Web Developer Express tạo cho bạn Mặc dù có vài bảng, bạn khơng truy xuất chúng thơng qua mã lệnh Nó truy xuất điều kiểm Login mới—tồn cơng việc thực phía hậu trường! Dự án sử dụng bảng aspnet_Users (xem hình 1-11) để đăng nhập cung cấp tên người dùng cho DiaryDB Bạn mở rộng sở liệu membership để thêm chức khác xác định trải nghiệm người dùng quy định cấp độ membership khác (admin, user, operator) Hình 1-11 25 Chương 1: Online Diary Các bảng sở liệu Online Diary vai trò chúng liệt kê bảng sau: Tên bảng Mô tả Chứa thông tin chi tiết tất người dùng, gồm ID tên họ Diary DiaryEntry Chứa tất mục nhật ký tất người dùng DiaryEvent Chứa tất kiện nhật ký tất người dùng Chứa thông tin chi tiết tất liên lạc cho sổ nhật ký Contact Khóa liên kết tất bảng với trường DiaryId Nó khóa bảng Diary khóa ngoại tất bảng khác Tại không sử dụng trường UserName? Về tốc độ—sẽ dễ nhanh kết bảng tìm kiếm trường kiểu số nguyên so với trường kiểu ký tự Mọi truy xuất đến sở liệu thông qua thủ tục tồn trữ Xét thủ tục tồn trữ sau: DeleteContact xóa liên lạc khỏi sở liệu Tên thủ tục tồn trữ thể mục đích thủ tục tồn trữ nên khơng cần giải thích nhiều Khi thảo luận mã lệnh, bạn xem xét thủ tục tồn trữ kỹ DeleteContact 1.2.2 Tầng nghiệp vụ Tầng nghiệp vụ tổ chức thành bảy lớp Trong đó, bốn lớp là: • OnlineDiary • DiaryEntry • DiaryEvent • Contact Các lớp thực hầu hết công việc giữ liệu nhật ký tạm thời, thu lấy lưu vào sở liệu Lớp thảo luận OnlineDiary ❑ Lớp OnlineDiary Lớp có hai phương thức công khai chia sẻ, mô tả chi tiết bảng sau: Phương thức Kiểu trả Mô tả InsertDiary(ByVal UserName As String, ByVal FirstName As String, LastName As String) không Thêm người dùng vào sở liệu Online Diary GetDiaryIdFromUserName(ByVal UserName As String) Integer Tìm kiếm UserName sở liệu trả DiaryId tương ứng Mục đích lớp OnlineDiary cung cấp hai phương thức chia sẻ liên quan đến nhật ký trực tuyến Nó sử dụng để mở rộng hệ thống nhật ký thêm chức vào hệ thống, không phần cụ thể danh bạ liên lạc ❑ Lớp Contact 26 Chương 1: Online Diary Lớp Contact thể hóa liên lạc—một người hay thứ mà bạn muốn lưu thơng tin liên lạc Nó đóng gói thứ để làm việc với liên lạc, bao gồm lưu trữ thu lấy thơng tin liên lạc sở liệu Nó có hai phương thức khởi dựng, mơ tả bảng sau: Phương thức khởi dựng Mô tả New(ByVal Diaryid as Integer) Tạo đối tượng Contact với tất thuộc tính gán giá trị mặc định New(ByVal ContactId As Long) Tạo đối tượng Contact với thuộc tính lấy từ sở liệu đối số ContactId Với đối tượng Contact tạo, việc lưu đơn giản gọi phương thức Save() Lớp xem xét có phải liên lạc cần chèn vào sở liệu hay không, liên lạc tồn cần cập nhật Ngồi phương thức Save(), lớp Contact cịn có hai phương thức Delete() hai phương thức GetContacts(), chúng mô tả bảng sau: Phương thức Save() DeleteContact() DeleteContact(ByVal ContactId As Long) Kiểu trả Mô tả không Lưu đối tượng Contact có đầy đủ liệu Nếu liên lạc mới, Save() gọi thủ tục InsertNewContact chi tiết liên lạc chèn vào sở liệu ContactId trả từ sở liệu gán cho mContactId Nếu liên lạc tồn sở Save() gọi liệu, UpdateContact để cập nhật sở liệu với giá trị đối tượng Contact khơng Xóa đối tượng Contact khỏi sở liệu với ContactId với mContactId đối tượng Contact Các giá trị đối tượng Contact khởi tạo lại giá trị mặc định không Phương thức chia sẻ xóa đối tượng Contact khỏi sở liệu với giá trị ContactId với đối số ContactId phương thức 38 Chương 1: Online Diary Hoàn tất Tài khoản bạn tạo. Hầu hết thẻ đánh dấu đặc tính liên quan đến thiết lập style Tuy nhiên, đặc tính quan trọng FinishDestinationPageUrl Đây nơi người dùng chuyển đến trình đăng ký hồn tất Trong Online Diary, trang SignOn.aspx Bạn thấy số thẻ WizardStep thẻ đánh dấu giống sau: CreateUserWizard làm việc sở bước Phải có bước cho phép người dùng chọn tên đăng nhập, mật khẩu, câu hỏi mật (xem hình 1-13) Bước style hiệu chỉnh (hình 1-13 hiển thị giá trị Việt hóa) Điều kiểm đảm nhận việc chèn liệu người dùng vào sở liệu người dùng Hình 1-13 Bước thứ hai (xem hình 1-14) hiển thị sau người dùng tạo 39 Chương 1: Online Diary Hình 1-14 Màn hình yêu cầu họ tên người dùng Khi đó, tùy bạn lưu liệu đâu, bạn thực điều kiện FinishButtonClick điều kiểm CreateUserWizard: Protected Sub CreateUserWizard1_FinishButtonClick(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.WizardNavigationEventArgs) _ Handles CreateUserWizard1.FinishButtonClick Dim myTextBox As TextBox Dim UserName, FirstName, LastName myTextBox = CreateUserWizard1.FindControl(“firstNameTextBox”) FirstName = myTextBox.Text myTextBox = CreateUserWizard1.FindControl(“lastNameTextBox”) LastName = myTextBox.Text UserName = CreateUserWizard1.UserName OnlineDiary.InsertDiary(UserName, FirstName, LastName) End Sub Bước tạo nhật ký lưu trữ họ tên người dùng UserName lấy từ thuộc tính UserName điều kiểm CreateUserWizard, phương thức chia sẻ InsertDiary() sử dụng để chèn người dùng vào sở liệu Online Diary Người ta đôi lúc quên mật May mắn thay, ASP.NET 2.0 có khả nhắc mật ❑ Nhắc mật Hầu chẳng cần mã lệnh nào, bạn tạo tính nhắc mật cho Online Diary điều kiểm PasswordRecovery Hầu tất thiết lập giá trị mặc định có liên quan đến style Chỉ có dịng mã kiện SendingMail: Protected Sub PasswordRecovery1_SendingMail(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) _ Handles PasswordRecovery1.SendingMail returnToLogOnHyperLink.Visible = True End Sub Sự kiện SendingMail phát sinh người dùng nhấn nút Gửi e-mail hiển thị liên kết Trở hình đăng nhập (người dùng khơng phải đốn đâu) Cơng việc cấu hình SMTP Server để gửi e-mail nhắc mật Visual Web Developer SMTP Server Tuy nhiên, bạn sử dụng dịch vụ SMTP IIS Windows XP/2000 Các bước cài đặt sau: Vào Start | Control Panel | Add or Remove Programs 40 Chương 1: Online Diary Trong hộp thoại Add or Remove Programs, chọn Add/Remove Windows Components Trong hộp thoại Windows Components Wizard, chọn Internet Information Server (IIS) nhắp nút Details Hình 1-15 Trong hộp thoại Internet Information Server (IIS), đánh dấu chọn SMTP Service nhắp OK 41 Chương 1: Online Diary Hình 1-16 Trong hộp thoại Windows Components Wizard, nhắp Next để cài tiến hành đặt dịch vụ SMTP Vào Start | Control Panel | Administrative Tools | Internet Information Services Trong IIS, nhắp phải vào Default SMTP Virtual Server chọn Properties Trong hộp thoại Default SMTP Virtual Server Properties, chọn thẻ Access nhắp nút Relay Hình 1-17 Trong hộp thoại Relay Restrictions, chọn All except the list below nhắp OK 42 Chương 1: Online Diary Hình 1-18 Khi dịch vụ SMTP cài đặt, thêm phần mã in đậm vào thẻ file Web.config: 1.3.3 Xem lịch biểu trực tuyến Trang DiaryMain.aspx trung tâm ứng dụng Nó hiển thị lịch biểu tháng tại, cho biết ngày có kiện hay mục nhật ký tương ứng với chúng Nó hiển thị danh sách kiện đến mục nhật ký cho tháng Để hiển thị ngày có kiện mục nhật ký, kiện kiểm Calendar sử dụng: OnDayRender điều Protected Sub Calendar1_OnDayRender(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles Calendar1.DayRender If Not e.Day.IsOtherMonth Then If entryArrayOfDays Is Nothing Then entryArrayOfDays = GetDaysInMonthWithEntries(Session(“DiaryId”), _ e.Day.Date.Month, e.Day.Date.Year) End If 43 Chương 1: Online Diary If eventArrayOfDays Is Nothing Then eventArrayOfDays = GetDaysInMonthWithEvents(Session(“DiaryId”), _ e.Day.Date.Month, e.Day.Date.Year) End If If entryArrayOfDays(CInt(e.Day.DayNumberText)) Then e.Cell.BackColor = Drawing.Color.Blue End If If eventArrayOfDays(CInt(e.Day.DayNumberText)) Then e.Cell.ForeColor = Drawing.Color.Red End If End If End Sub Hai khối If đoạn mã đảm bảo entryArrayOfDays eventArrayOfDays chứa liệu ngày có mục nhật ký hay kiện Chúng mảng Boolean; ngày có mục nhật ký hay kiện, phần tử mảng cho ngày hơm chứa giá trị True Các mảng nhận liệu từ hàm chia sẻ GetDaysInMonthWithEntries() GetDaysInMonthWithEvents() lớp DiaryEntry DiaryEvent Trong hai khối If tiếp theo, mã lệnh kiểm tra ngày tháng có thể có mục nhật ký hay kiện khơng Nếu có kiện, phần văn ngày tơ màu đỏ Nếu có mục nhật ký, phần ngày tơ màu xanh Ngồi điều kiểm Calendar, trang cịn có hai điều kiểm GridView GridView phía hiển thị kiện đến, GridView phía hiển thị mục nhật ký gần Cả hai điều kiểm lấy liệu từ điều kiểm ObjectDataSource—một điều kiểm ASP.NET 2.0 Trước đây, điều kiểm nguồn liệu tương tác trực tiếp với sở liệu, dễ sử dụng— cần đặt lên trang, thiết lập vài thuộc tính,… Tuy nhiên, khơng phải lối viết mã hay Việc tách tầng truy xuất liệu, tầng nghiệp vụ, tầng trình bày lối tốt xem xét, phải bỏ điều kiểm nguồn liệu dễ-sử-dụng! Tuy nhiên, ObjectDataSource cho phép bạn hai: điều kiểm liệu dễ-sử-dụng sử dụng lớp để phân tách tầng nghiệp vụ, tầng liệu, tầng trình bày Thay kết nối trực tiếp đến sở liệu, ObjectDataSource lấy liệu từ lớp Ví dụ, diaryEntriesObjectDataSource DiaryMain.aspx lấy liệu từ phương thức GetDiaryEntriesRecentlyChanged() lớp DiaryEntry, thẻ đánh dấu sau: Đặc tính TypeName định tên lớp, đặc tính SelectMethod định phương thức lớp cung cấp liệu GetDiaryEntriesRecentlyChanged() phương thức chia sẻ: Public Shared Function GetDiaryEntriesRecentlyChanged(ByVal DiaryId As Integer) _ As SqlDataReader Dim diaryDBConn As New SqlConnection(conString) Dim sqlString As String = “GetRecentDiaryEntries” Dim sqlCmd As New SqlCommand(sqlString, diaryDBConn) sqlCmd.CommandType = CommandType.StoredProcedure sqlCmd.Parameters.AddWithValue(“@DiaryId”, DiaryId) diaryDBConn.Open() Dim entrySQLDR As SqlDataReader = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection) sqlCmd = Nothing 44 Chương 1: Online Diary Return entrySQLDR End Function Phương thức trả đối tượng ObjectDataSource sử dụng SqlDataReader gồm liệu mà điều kiểm Việc hiển thị liệu vấn đề trỏ điều kiểm vào ObjectDataSource: Trong thẻ đánh dấu điều kiểm GridView, đặc tính DataSourceID định nguồn liệu—đó điều kiểm ObjectDataSource Ngoài ra, thẻ đánh dấu định cột hiển thị cách thiết lập AutoGenerateColumns False Bước cuối tạo danh sách cột: Ngoài việc cho phép hiển thị liệu, điều kiểm xóa mẩu tin sở liệu ObjectDataSource cập nhật, chèn, 1.3.4 Tạo, chỉnh sửa, xem mục nhật ký Trang DayView.aspx cho phép chỉnh sửa nhật ký Trang chứa form cho phép bạn nhập tiêu đề nội dung mục nhật ký Nó hiển thị mục nhật ký tồn Tất cơng việc hồn tất cách sử dụng lớp DiaryEntry Sự kiện Page_Load tạo lớp DiaryEntry mới, truyền cho phương thức khởi dựng DiaryId người dùng ngày mà trang nhắc đến: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load mDiaryEntry = New DiaryEntry(CInt(Session(“DiaryId”)),CDate(dayShownLabel.Text)) changeDayCalendar.SelectedDate = CDate(dayShownLabel.Text) changeDayCalendar.VisibleDate = changeDayCalendar.SelectedDate If Not IsPostBack Then entryTextTextBox.Text = mDiaryEntry.EntryText entryTitleTextBox.Text = mDiaryEntry.EntryTitle End If End Sub mDiaryEntry biến toàn cục, sử dụng để chứa đối tượng chỉnh sửa DiaryEntry ứng ngày Phương thức khởi dựng, trình bày đoạn mã sau, thực lấy liệu: 45 Chương 1: Online Diary Public Sub New(ByVal DiaryId As Integer, ByVal EntryDate As Date) mDiaryId = DiaryId If mDiaryId > Then Try Dim diaryDBConn As New SqlConnection(conString) Dim sqlString As String = “GetDiaryEntryByDate” Dim sqlCmd As New SqlCommand(sqlString, diaryDBConn) sqlCmd.CommandType = CommandType.StoredProcedure sqlCmd.Parameters.AddWithValue(“@DiaryId”, mDiaryId) sqlCmd.Parameters.AddWithValue(“@EntryFromDate”, EntryDate) sqlCmd.Parameters.AddWithValue(“@EntryToDate”, EntryDate) diaryDBConn.Open() Dim diaryEntrySQLDR As SqlDataReader = _ sqlCmd.ExecuteReader(CommandBehavior.CloseConnection) sqlCmd = Nothing If diaryEntrySQLDR.Read() Then mDiaryEntryId = CLng(diaryEntrySQLDR(“DiaryEntryId”)) mEntryDate = CDate(diaryEntrySQLDR(“EntryDate”)) mEntryTitle = diaryEntrySQLDR(“EntryTitle”).ToString mEntryText = diaryEntrySQLDR(“EntryText”).ToString Else mDiaryEntryId = -1 mEntryDate = EntryDate End If diaryEntrySQLDR.Close() diaryEntrySQLDR = Nothing diaryDBConn.Close() diaryDBConn = Nothing Catch ex As Exception mDiaryEntryId = -1 End Try End If End Sub Thủ tục tồn trữ GetDiaryEntryByDate gọi để lấy liệu Nếu chưa có mục nhật ký cho ngày hơm đó, mDiaryEntryId gán -1 tất thuộc tính khác gán giá trị mặc định Ngược lại, chúng nhận liệu từ sở liệu Khi hộp tiêu đề hộp nội dung mục nhật ký thay đổi, mDiaryEntry cập nhật: Protected Sub entryTitleTextBox_TextChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles entryTitleTextBox.TextChanged mDiaryEntry.EntryTitle = entryTitleTextBox.Text End Sub Protected Sub entryTextTextBox_TextChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles entryTextTextBox.TextChanged mDiaryEntry.EntryText = entryTextTextBox.Text End Sub Việc lưu thay đổi diễn bạn nhắp nút Lưu nhật ký: Protected Sub saveDiaryEntryButton_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles saveDiaryEntryButton.Click mDiaryEntry.Save() End Sub Mọi thứ liên quan đến việc gọi phương thức Save() đối tượng DiaryEntry: 46 Chương 1: Online Diary Public Sub Save() If mDiaryEntryId = -1 Then InsertNewDiaryEntry() Else UpdateDiaryEntry() End If End Sub Dựa vào mDiaryEntryId có -1 hay khơng, phương thức chèn mục nhật ký vào sở liệu cập nhật mục nhật ký tồn Phương thức riêng InsertNewDiaryEntry() chèn mục nhật ký mới: Private Sub InsertNewDiaryEntry() If mDiaryId -1 Then Dim diaryDBConn As New SqlConnection(conString) Dim sqlString As String = “InsertDiaryEntry” Dim sqlCmd As New SqlCommand(sqlString, diaryDBConn) sqlCmd.CommandType = CommandType.StoredProcedure sqlCmd.Parameters.AddWithValue(“@DiaryId”, mDiaryId) sqlCmd.Parameters.AddWithValue(“@EntryDate”, mEntryDate) sqlCmd.Parameters.AddWithValue(“@EntryTitle”, mEntryTitle) sqlCmd.Parameters.AddWithValue(“@EntryText”, mEntryText) sqlCmd.Parameters.Add(“@NewDiaryEntryId”, SqlDbType.BigInt) sqlCmd.Parameters(“@NewDiaryEntryId”).Direction = ParameterDirection.ReturnValue diaryDBConn.Open() sqlCmd.ExecuteNonQuery() mDiaryEntryId = CLng(sqlCmd.Parameters(“@NewDiaryEntryId”).Value()) diaryDBConn.Close() sqlCmd = Nothing diaryDBConn = Nothing End If End Sub Phương thức riêng UpdateDiaryEntry() cập nhật mục nhật ký tồn tại: Private Sub UpdateDiaryEntry() If mDiaryEntryId -1 Then Dim diaryDBConn As New SqlConnection(conString) Dim sqlString As String = “UpdateDiaryEntry” Dim sqlCmd As New SqlCommand(sqlString, diaryDBConn) sqlCmd.CommandType = CommandType.StoredProcedure sqlCmd.Parameters.AddWithValue(“@DiaryEntryId”, mDiaryEntryId) sqlCmd.Parameters.AddWithValue(“@EntryDate”, mEntryDate) sqlCmd.Parameters.AddWithValue(“@EntryTitle”, mEntryTitle) sqlCmd.Parameters.AddWithValue(“@EntryText”, mEntryText) diaryDBConn.Open() sqlCmd.ExecuteNonQuery() diaryDBConn.Close() sqlCmd = Nothing diaryDBConn = Nothing End If End Sub Phần thảo luận mã lệnh chỉnh sửa, xem, xóa kiện 1.3.5 Tạo, chỉnh sửa, xem kiện nhật ký Các kiện tạo cách nhắp vào liên kết Thêm kiện trang DayView.aspx Liên kết dẫn bạn đến form trang AddEvent.aspx Khi nút Lưu kiện nhắp, kiện Click tạo đối tượng DiaryEvent với liệu thuộc tính 47 Chương 1: Online Diary lấy từ form, sau gọi phương thức Save() Dòng chảy mã lệnh giống hệt phương thức Save() đối tượng DiaryEvent Những chỗ mà chức giống tương tự nhau, tên phương thức đối tượng khác giữ giống Điều giảm thiểu nhầm lẫn khiến thứ dễ dàng Tất kiện liên quan đến ngày cụ thể trình bày trang DayView.aspx Điều kiểm ObjectDataSource trang DayView.aspx lấy liệu từ phương thức chia sẻ GetDiaryEventsByDate() đối tượng DiaryEvent Thẻ đánh dấu cho điều kiểm ObjectDataSource sau: Chú ý SelectParameters DeleteParameters thiết lập để định liệu truyền cho phương thức GetDiaryEventsByDate() (dùng để thu lấy liệu) phương thức DeleteEvent() (dùng để xóa kiện nhật ký) Điều kiểm GridView kết với ObjectDataSource đoạn mã trên: Ngoài ra, tham số sau: AutoGenerateColumns thiết lập False, cột định 48 Chương 1: Online Diary Liên kết dẫn người dùng đến trang EditEvent.aspx URL chứa thông số chuỗi truy vấn EventId, ban đầu gán {0}, lúc thực thi thay giá trị cột thứ dòng DataSet Ngồi ra, mã lệnh định nút Xóa dịng khung lưới: Khi bạn nhắp vào nút Xóa, điều kiểm GridView yêu cầu điều kiểm ObjectDataSource gọi phương thức xóa định lớp cung cấp liệu Trong trường hợp này, phương thức DeleteEvent() lớp DiaryEvent Đặc tính DataKeyNames thẻ đánh dấu điều kiểm GridView định trường khóa cần sử dụng để xóa dịng Trở lại việc chỉnh sửa kiện: nhắp vào liên kết Sửa, bạn đưa đến trang EditEvent.aspx EventId liên kết Sửa truyền làm thông số URL Trang EditEvent.aspx giống hệt trang AddEvent.aspx thảo luận trước Điểm khác biệt khởi tạo trang Hàm thụ lý kiện Page_Init trình bày đoạn mã sau, nơi mà chi tiết kiện nhập vào form: Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init Dim EventBeingEdited As New DiaryEvent(CLng(Request.QueryString(“EventId”))) eventNameTextBox.Text = EventBeingEdited.EventName eventDescriptionTextBox.Text = EventBeingEdited.EventDescription dayShownLabel.Text = EventBeingEdited.EventDate.Day & “ “ & _ MonthName(EventBeingEdited.EventDate.Month) & “ “ & EventBeingEdited.EventDate.Year Dim NewListItem As ListItem, HourCount, MinuteCount For HourCount = To 23 If HourCount < 10 Then NewListItem = New ListItem(“0” & HourCount, HourCount.ToString) Else NewListItem = New ListItem(HourCount.ToString, HourCount.ToString) End If If EventBeingEdited.EventDate.Hour = HourCount Then NewListItem.Selected = True End If StartHourDropDownList.Items.Add(NewListItem) Next For MinuteCount = To 59 If MinuteCount < 10 Then NewListItem = New ListItem(“0” & MinuteCount.ToString, MinuteCount.ToString) Else NewListItem = New ListItem(MinuteCount.ToString, MinuteCount.ToString) End If If EventBeingEdited.EventDate.Minute = MinuteCount Then NewListItem.Selected = True End If StartMinuteDropDownList.Items.Add(NewListItem) Next Dim itemToSelect As ListItem itemToSelect = _ eventDurationDropDownList.Items.FindByValue(EventBeingEdited.EventDuration.ToString()) itemToSelect.Selected = True EventBeingEdited = Nothing End Sub 49 Chương 1: Online Diary trích từ thơng số URL sử dụng để tạo đối tượng DiaryEvent Việc đưa liệu vào textbox kiện dễ dàng, chi tiết thời gian thời lượng kiện liên quan đến việc đưa liệu vào hộp xổ xuống phút, phải đảm bảo giá trị xác chọn Điều thực cách lặp từ 023 phút từ 0-59 EventId 1.3.6 Quản lý danh bạ liên lạc Quản lý danh bạ liên lạc phần cuối Online Diary mà bạn khảo sát, phần sử dụng nguyên tắc giống phần khác YourContacts.aspx trang quản lý danh bạ liên lạc Tại đây, danh sách liên lạc hiển thị, bao gồm tùy chọn: thêm, chỉnh sửa, xóa liên lạc Tất liên lạc hiển thị điều kiểm DataObjectSource GridView; nguyên tắc giống hiển thị, xóa, chỉnh sửa kiện nhật ký Lúc này, lớp Contact sử dụng cho việc chỉnh sửa hiển thị thông tin liên lạc Trang dùng để hiển thị liên lạc YourContacts.aspx, điều kiểm liệt kê tất liên lạc có: GridView Nó lấy liệu từ điều kiểm ObjectDataSource ObjectDataSource1, đến phiên điều kiểm kết nối đến phương thức chia sẻ GetContactByFirstLetter() lớp Contact: Thông số DeleteMethod điều kiểm ObjectDataSource gắn với DeleteContact lớp Contact Điều kiểm GridView thiết lập hiển thị liên kết để xóa liên lạc, phương thức thực thao tác xóa: 50 Chương 1: Online Diary Public Shared Sub DeleteContact(ByVal ContactId As Long) Dim diaryDBConn As New SqlConnection(conString) Dim sqlString As String = “DeleteContact” Dim sqlCmd As New SqlCommand(sqlString, diaryDBConn) sqlCmd.CommandType = CommandType.StoredProcedure sqlCmd.Parameters.AddWithValue(“@ContactId”, ContactId) diaryDBConn.Open() sqlCmd.ExecuteNonQuery() diaryDBConn.Close() sqlCmd = Nothing diaryDBConn = Nothing End Sub có liên kết Sửa; nhắp vào, người dùng chuyển đến trang EditContact.aspx: GridView ContactId tương ứng truyền URL làm liệu URL Liên kết Thêm liên lạc trang YourContacts.aspx đưa bạn đến form nhập thông tin liên lạc như: tên, e-mail, số điện thoại,… Trang trang EditContact.aspx hoạt động tương tự ngoại trừ chi tiết quan trọng: trang EditContact.aspx lấy thông tin liên lạc (để chỉnh sửa) từ lớp Contact Điều diễn kiện Page_Load: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack Then Dim currentContact As New Contact(CLng(Request.QueryString(“ContactId”))) currentContact.FirstName = firstNameTextBox.Text currentContact.LastName = lastNameTextBox.Text currentContact.AddressLine1 = addressLine1TextBox.Text currentContact.City = cityTextBox.Text currentContact.PostalCode = postalCodeTextBox.Text currentContact.State = stateTextBox.Text currentContact.Telephone = telephoneTextBox.Text currentContact.MobilePhone = mobilePhoneTextBox.Text currentContact.Email = emailTextBox.Text currentContact.SaveContact() currentContact = Nothing Response.Redirect(“YourContacts.aspx”) Else Dim currentContact As New Contact(CLng(Request.QueryString(“ContactId”))) firstNameTextBox.Text = currentContact.FirstName lastNameTextBox.Text = currentContact.LastName addressLine1TextBox.Text = currentContact.AddressLine1 cityTextBox.Text = currentContact.City postalCodeTextBox.Text = currentContact.PostalCode stateTextBox.Text = currentContact.State telephoneTextBox.Text = currentContact.Telephone mobilePhoneTextBox.Text = currentContact.MobilePhone emailTextBox.Text = currentContact.Email currentContact = Nothing End If End Sub Câu lệnh If xác định là postback (form submit nó) hay trang vừa nạp Nếu postback, bạn cần lưu liệu trở trang danh bạ liên lạc Nếu trang nạp, bạn cần tạo đối tượng Contact mới, sử dụng liệu từ để đổ liệu vào trường form 51 Chương 1: Online Diary Trang AddContact.aspx giống vậy, trừ việc đổ liệu có, liên lạc khơng có liệu trước! 1.4 Cài đặt Online Diary Một điều tuyệt vời ASP.NET 2.0 dễ dàng cài đặt ứng dụng web từ máy lên máy khác Để cài đặt ứng dụng PC bạn, bạn việc chép tồn thư mục file từ CD-ROM đính kèm vào thư mục PC bạn (chẳng hạn C:\Websites) Trong Visual Web Developer, chọn File | Open Web Site tìm đến thư mục mà bạn chép file Sau đó, nhấn F5 để chạy ứng dụng Nếu cài đặt IIS, bạn tạo thư mục ảo OnlineDiary cho ứng dụng duyệt http://localhost/OnlineDiary/SignOn.aspx Nếu muốn hiệu chỉnh ứng dụng Online Diary, bạn tham khảo phần 1.5 Mở rộng Online Diary Dự án cung cấp điểm khởi đầu tốt cho hệ thống quản lý danh bạ liên lạc nhật ký trọn vẹn Ví dụ, bạn cải tiến việc quản lý hiển thị danh bạ liên lạc Dù hoạt động tốt danh bạ liên lạc nhỏ, hệ thống trở nên cồng kềnh danh bạ liên lạc tăng Tổ chức hiển thị liên lạc theo chữ phần họ (hay theo chữ phần tên) cách giải vấn đề Lớp Contact có phương thức cho phép điều bạn sử dụng Một chọn lựa khác thêm tính tìm kiếm dựa hay nhiều thông số e-mail, tên, Cách hay cách kia, bạn cần hiệu chỉnh trang YourContacts.aspx Hiện hiển thị liên lạc điều kiểm GridView, cho tất Lớp Contact có hàm nhận vào chữ phần họ làm thông số Tuy nhiên, thông số tùy chọn Bằng việc thêm danh sách xổ xuống gồm chữ từ A đến Z, bạn sử dụng để truyền chữ phần họ làm thông số Sau đó, bạn cần cho điều kiểm ObjectDataSource biết thơng số Nếu gọi danh sách xổ xuống DropDownBox1 bạn cần thêm phần tử sau vào thẻ đánh dấu ObjectDataSource: Giờ đây, có phần họ định danh sách xổ xuống hiển thị Một vài cải tiến xem xét: ✓ Tính upload lưu trữ ảnh người danh bạ liên lạc ✓ Tính định quan tâm đến kiện ✓ Lưu trữ chi tiết ngày sinh người có nhắc tự động ✓ Có nhắc tự động kiện mail cho bạn ✓ Thêm tính hỗ trợ tin nhắn điện thoại di động, cho phép bạn gửi e-mail hay text message đến người danh bạ liên lạc 52 Chương 1: Online Diary 1.6 Kết chương Qua chương này, bạn biết cách tạo hệ thống quản lý danh bạ liên lạc nhật ký đầy đủ chức năng, tất với mã lệnh nhờ điều kiểm chức ASP.NET 2.0 Các điều kiểm bảo mật giúp tiết kiệm nhiều thời gian viết mã Trong chương này, chúng sử dụng để tạo người dùng đăng nhập Tuy nhiên, chúng cung cấp nhiều chức tạo vai trò người dùng khác nhau, sau cho phép bạn định người dùng làm khơng thể làm dựa vào vai trị họ Hoặc bạn để người dùng xác định cảm quan trang tài khoản họ điều kiểm ASP.NET 2.0 Một điều kiểm tuyệt vời khác mà bạn khám phá chương ObjectDataSource Các điều kiểm nguồn liệu trước khiến công việc dễ dàng hơn, thiết kế mã kém, bạn phải từ bỏ kiến trúc ba tầng Giờ với điều kiểm ObjectDataSource, bạn có kiến trúc ba tầng cho dự án với thiết kế tốt, tính bảo trì cao Trong chương tiếp theo, bạn tạo dự án chia sẻ file tìm hiểu thêm vài tính ASP.NET 2.0 ... Chương 1: Online Diary Q ua chương n? ?y, b? ?n t? ??o sổ nh? ?t k? ? tr? ?c tuy? ?n (online diary) trình qu? ?n lý danh bạ li? ?n l? ?c (contacts manager) V? ?y x? ?c sổ nh? ?t k? ? tr? ?c tuy? ?n trình qu? ?n lý danh bạ li? ?n. .. Ngoài phương th? ?c khởi t? ??o phương th? ?c tr? ?n, lớp sau: DiaryEntry Thu? ?c t? ?nh Ki? ?u EntryTitle String Ti? ?u đề m? ?c nh? ?t k? ? ng? ?y EntryText String N? ??i dung m? ?c nh? ?t k? ? ng? ?y EntryDate Date Mô t? ?? Ng? ?y t? ??o... mDiaryEntryId c? ? -1 hay khơng, phương th? ?c ch? ?n m? ?c nh? ?t k? ? vào sở li? ?u c? ??p nh? ?t m? ?c nh? ?t k? ? t? ? ?n Phương th? ?c riêng InsertNewDiaryEntry() ch? ?n m? ?c nh? ?t k? ? mới: Private Sub InsertNewDiaryEntry()

Ngày đăng: 27/06/2014, 12:20

Tài liệu cùng người dùng

Tài liệu liên quan