LI NểI Ờ ĐẦU
P hn I: C CK THU TTO TRANG TI LI Uầ ÀỆ
2.4.13 ASP.NET User Web control
Cỏc điều khiển trong ASP .NET đó cung cấp nhiều chức năng rất cú ớch, nhưng chỳng vẫn khụng thể đỏp ứng được hết cỏc yờu cầu trong nhiều hoàn cảnh khỏc nhaụ Web user control cho phộp ta dễ dàng định nghĩa cỏc control mà ta cần trong những ứng dụng, sử dụng cựng một ký thuật lập trỡnh tương tự như khi ta viết với cỏc trang Web form. Ta cú thể thậm chớ chuyển đổi từ một trang Web form thành một Web User Control chỉ với vài thay đổi nhỏ. Cú một điều nờn nhớ cỏc Web User Control khụng thể chạy riờng nếu như nú khụng được đặt vào một trang Web Form nàọ Cỏc User Control được xỏc định cú phần mở rộng là .ascx
2.4.13.1 Cấu trỳc của User Control
Một User Control tương tự như một Web Form hoàn chỉnh, với cả hai giao diện người dựng và mó ẩn. Tuy nhiờn trang giao diện người dựng cú một số điểm khỏc biệt với Web Form:
. Trong User Control khụng cũn thẻ <HTML>, <BODY> và thẻ <FORM> Một User Control cũng như mụt trang Web Form. Ta cú thể sử dụng cỏc thành phần HTML và Web Control trong User Control hoàn toàn giống với cỏch làm như với trang Web Form. Vớ dụ ta cú thể tạo một user control để sử dụng như toolbar, đặt vào trong đú cỏc Button Web server control tạo sự kiện và nắm bắt cỏc sự kiện đú.
2.1.13.2Tạo Web User Control:
Đoạn mó sau tạo một Web user control đơn giản được sử dụng như là một menụ Cú bốn menu lựa chọn là cỏc thành phần Hyperlink:
<%@ Control Language="vb" AutoEventWireup="false"
Codebehind="menụascx.vb" Inherits="myProj.menu"%> <P>
<asp:HyperLink id=lnkLogin runat="server" _
NavigateURL="Login.aspx">Login</asp:HyperLink> <asp:HyperLink id=lnkAđToCart runat="server" _
NavigateURL="Cart.aspx>Ađ to Cart</asp:HyperLink> | <asp:HyperLink id=lnkTechSupport runat="server" _
NavigateURL="TechSupport.aspx">Technical Support </asp:HyperLink> |
<asp:HyperLink id=lnkAbout runat="server" _
NavigteURL="AboutUs.aspx">About Us</asp:HyperLink> </P>
Thờm cỏc User Control vào Web Form
Ta cú thể thờm một Web User Control vào Web Form bằng việc thờm một chỉ thị @ Registervà một thẻ cho control đến trang. Bằng cỏch này control đú đó trở thành một phần của trang và nú được biểu diễn khi trang dược xử lý. Hơn nữa cỏc thuộc tớnh cụng cộng, sự kiện, phương thức được phơi bày ra cho trang và cú thể lập trỡnh được ta cũng cú thể thờm vào trang cỏc user control một theo cỏch lập trỡnh.
Để thờm một User Control vào trang Web Form, tại đầu trang trước cả thẻ <HTML> phải thờm một chỉ thị để đăng ký thụng bỏo cho trang khi nú được xử lý. Chỉ thị ta đưa vào cú gắn với một tờn và một namespace bằng giỏ trị cụ thể:
<%@ Register TagPrefix="myNameSpace" TagName = "myUserControl" Src="userControl1.ascx" %>
Thuộc tớnh Miờu tả
TagPrefix Chỉ định một namespace duy nhất cho user Control, vỡ vậy trong trang của ta cú thể cú nhiều user control cú tờn giống nhau, nhưng chỳng cú thể là hoàn toàn khỏc nhaụ Vớ dụ
<myNamespce:xxx>
TagName sự liờn kết với tag prefix để xỏc định namespace duy nhất cho control của Được dựng để đặt tờn cho User control. Tờn này được sử dụng trong
ta <myNameSpace:myUserControl ... />
Src "/MyApp/Include/UserControl1.ascx".Thuộc tớnh Src là đường dẫn ảo tới user control, vớ dụ:
.
Trong thẻ <BODY> của trang, tạo một thẻ cho control tại nơi mà ta muốn nú thể hiện. Sử dụng TagPrefix và Tagname mà ta đó đăng ký với thuộc tớnh runat=”server” như đoạn mó sau:
<myNameSpace:myUserControl ID="mnuMain" runat="server" />
Nếu control của ta cú thuộc tớnh, ta cú thể đặt cho nú trong lỳc thiết kế, cỏc thuộc tớnh đú thường cú giỏ trị ngay trong thẻ:
<myNameSpace:myUserControl ID="mnuMain" runat="server"
selected="Login" backColor="black" />
Tạo một Web User Control
Ta cú thể dựng một trỡnh soạn thảo text hay bất kỳ trỡnh soạn thoả HTML nào để tạo một Web User control. Cỳ phỏp để định nghĩa một User control rất giụng như Web For; điểm khỏc biệt chớnh là cỏc User control khụng cú cỏc thẻ <HTML>,<BODY> và <FORM> trờn nội dung của nú.
User control chú thể là cỏc file text đơn giản hay cú thể chứa cỏc điều khiển phớa server. Sau đõy là một mó tạo một form login đơn giản mà ta cú thể đưa vào nhiều trang trong ứng dụng của ta:
Trước hết để khai bỏo hai thuộc tớnh mới trong control của ta và thao tỏc nú với cỏc thành phần ASP khỏc:
[Visual Basic]
<script language="VB" runat="server"> Public Property UserId() As [String] Get Return User.Text End Get Set User.Text = value End Set End Property
Public Property Password() As [String] Get Return Pass.Text End Get Set Pass.Text = value End Set End Property </script>
Sau đú đặt tờn cho control của ta và save nú với tờn file mở rộng là .ascx
2.5 TRUY XUẤT DỮ LIỆU VỚI ADỌNET
Một trong những lý do khiến cho ASP phỏt triển rộng rói là những tiện ớch của nú để truy cập cơ sở dữ liệu khỏc nhau ngay trong ứng dụng Web. ASP gắn với Ado cú thể truy cập đến mọi loại cơ sở dữ liệu hiện cú. ASP.NET mở rộng khả năng này bằng việc giới thiệu ADỌNET (hay ADO +). Cung cấp cơ chế xử lý dữ liệu linh động dễ dàng thao tỏc và ràng buộc mọi kiểu dữ liệu vào cỏc thành phần điều khiển Web hiện cú.
ActiveX Data Object cho .NET Framework (ADỌNET) là một bộ cỏc lớp để thực hiện cỏc dịch vụ truy xuất dữ liệu cho cỏc lập trỡnh viờn .NET, ADỌNET cung cấp rất nhiều cỏc component phong phỳ cho việc tạo cỏc ứng dụng phõn tỏn và chia xẻ dữ liệụ Nú là một phần được tớch hợp trong .NET framework, hỗ trợ để truy xuất đến cơ sở dữ liệu quan hệ, XML và cơ sở dữ liệu ứng dụng. Ngoài ra, ADỌNET cũn đỏp ứng cỏc nhu cầu đa dạng của nhà phỏt triển.
Qua ADỌNET cỏc trỡnh tiờu thụ (consumer) dữ liệu chia xẻ cú thể tiếp cập đến nguồn dữ liệu như SQL Server hay cỏc nguồn dữ liệu được hỗ trợ bởi
ADỌNET gồm cú .NET data provider để thực hiện việc kết nối tới cơ sở dữ liệu, bộ thực hiện lệnh và kết quả nhận được. Những kết quả này cú thể được xử lý một cỏch trực tiếp hoặc được lưu trong đối tượng DataSet để người dựng cú thể quản lý, kết hợp với dữ liệu từ cỏc cỏc nguồn dữ liệu khỏc, hay di chuyển đi xa giữa cỏc tầng. Đối tượng DataSet trong ADỌNET cú thể được sử dụng một cỏch độc lập như là một trỡnh cung cấp dữ liệu .NET để quản lý dữ liệu địa phương cho ứng dụng hay là nguồn cho XML. ADỌNET cung cấp cho người phỏt triển việc viết mó lệnh được quản lý một cỏch chức năng hoỏ như cỏc chức năng mà cỏc nhà phỏt triển khi dựng với ADỌ
2.5 Mục đớch thiết kế cho ADỌNET
Ngày nay ngày càng nhiều cỏc ứng dụng sử dụng XML để mó hoỏ dữ liệu khi qua cỏc kết nối mạng. Cỏc ứng dụng Web sử dụng HTTP như là bộ khung chung trong việc truyền thụng giữa cỏc tầng, và từ đú trạng thỏi giữa cỏc lần triệu gọi phải được nắm bắt một cỏch rừ ràng. Mụ hỡnh mới này rất khỏc với kiểu lập trỡnh kết nối chặt chẽ mà cụ thể là kiểu client/server, nơi mà một kết nối được mở trong suốt thời gian sống của ứng dụng và khụng cú thụng tin về trạng thỏi nào được nắm bắt.
Microsoft đó nhận thấy rằng cần phải cú một kiểu lập trỡnh mới để truy cập dữ liệụ ADỌNET được thiết kế để giải quyết cỏc vấn đề trong mụ hỡnh lập trỡnh mới này: Cấu trỳc dữ liệu khụng kết nối, gắn bú chặt chẽ với XML, thể hiện dữ liệu thụng thường với khả năng kết hợp dữ liệu từ cỏc nguồn dữ liệu khỏc nhau và kết hợp cỏc tiện ớch trong việc tương tỏc với Cơ sở dữ liệu, tất cả được đưa vào trong .NET Framework.
Trong khi thiết kế ADỌNET, Microsoft đó đưa vào những mục đớch thiết kế sau:
Mụ hỡnh lập trỡnh trong ADỌNET tương tự giống với ADO, vỡ thế cỏc nhà phỏt triển với ADO khụng phải bắt đầu lại từ đầu trong việc học một cụng nghệ truy cập dữ liệu mớị ADỌNET là một phần nội tại của .NET Framework dường như khụng hoàn toàn xa lạ với cỏc lập trỡnh viờn ADỌ
2.5.2 Hỗ trợ mụ hỡnh lập trỡnh N-Tier
ADỌNET hỗ trợ mụi trường lập trỡnh n-tier khụng kết nốị Khỏi niệm làm việc với dữ liệu khụng kết nối dó trở thành tõm điểm của mụ hỡnh lập trỡnh. ADO là giải phỏp cho kiểu lập trỡnh này bằng đối tượng DataSet.
2.5.3 Tớch hợp với XML.
XML và việc truy cập dữ liệu cú quan hệ sõu sắc với nhau-XML thỡ thực hiện cỏc việc liờn quan đến mó hoỏ dữ liệu và việc truy cập dữ liệu trở lờn nhanh hơn với XML.
2.5.4 Cấu trỳc của ADỌNET Cỏc thành phần của ADỌNET
Cỏc thành phần trong ADỌNET được thiết kế để tiếp cận với dữ liệu từ việc thao tỏc dữ liệụ Cú hai thành phần trung gian để ADỌNET thực hiện việc này là DataSet và .NET Provider, một bộ cỏc thành phần gồm cỏc đối tượng Connection, Command, DataReader và DataAdapter.
Đối tượng ADỌNET Dataset là thành phần cốt lừi của kiến trỳc khụng kết nối trong ADỌNET. DataSet được thiết kế cho việc truy cập dữ liệu độc lập với nguồn dữ liệụ Kết quả là nú cú thể được sử dụng với nhiều nguồn dữ liệu khỏc nhau, với XML, hay được dựng để quản lý dữ liệu địa phươngcho ứng dụng. DataSet chứa một tập hợp cỏc đối tượng DataTable làm thành cỏc hàng và cột cho dữ liệu, cỏc thụng tin về khoỏ chớnh khoỏ ngoại, cỏc ràng buộc và quan hệ về dữ liệu được chứa trong DataTablẹ
Mỗi đối tượng trong DataSet gồm nhiều bảng DataTable, cỏc bảng trong DataSet quan hệ với nhau thụng qua đối tượng DataRelationship. Đơn giản, ta hóy hỡnh dung DataSet là một tập con cỏc bảng trớch ra từ cơ sở dữ liệu và hoạt động độc lập với dữ liệu ban đầụ Dataset cung cấp cho ta cỏch làm việc với dữ liệu khụng kết nối tương tự như đang làm việc với dữ liệu nối trực tuyến thụng thường.
Đối tượng Dataview cho phộp tuỳ biến cỏch nhỡn nhận dữ liệu chứa trong cỏc bảng của DataSet. Mục đớch chớnh của Dataview là hỗ trợ cơ chế ràng buộc dữ liệụ Ta cú thể hỡnh dung Dataview tương tự với đối tượng Recordset trong ADỌ Dataview thể hiện dữ liệu duy nhất của một bảng trong DataSet
Một thành phần cốt lừi khỏc của kiến trỳc ADỌNET là .NET provider, gồm cỏc thành phần được thiết kế một cỏch rừ ràng trong việc thao tỏc với dữ liệụ Đối tượng Connection là cầu nối với nguồn CSDL, đối tượng Command cho phộp truy cập đến CSDL để lấy kết quả trở về, sửa đổi dữ liệu, chạy cỏc stored Procedure và gửi hay nhận cỏc thụng tin về tham số. đối tượng DataReader biểu diễn luồng dữ liệu nhận được từ nguồn CSDL. Cuối cựng là DataAdapter là cầu nối giữa đối tượng DataSet và nguồn dữ liệụ DataAdapter sử dụng đối tượng Command để thực hiện cõu lệnh SQL tại CSDL và đưa vào dữ liệu vào DataSet.
Đối tượng DataReader trong thành phần .NET Provider cho phộp đọc cụ thể từng dũng và cột dữ liệu trong bảng. Chức năng DataReader tương tự như Recordset mà ta vẫn dựng trong ADO cũ. Vớ dụ:
Mụ tả việc dựng DataSet và DataReader
Khi quyết định sử dụng DataReader hay Dataset, ta nờn cõn nhắc xem cỏc kiểu chức năng mà ứng dụng của ta cần. Sử dụng DataSet để thực hiện cỏc cụng viờc sau đõy:
- Truy cập dữ liệu từ xa giữa cỏc tầng hay từ dịch vụ Web.
- Tương tỏc với dữ liệu động như ràng buộc với cỏc điều khiển hay kết hợp với cỏc dữ liệu quan hệ từ cỏc nguồn khỏc nhaụ
- Cache dữ liệu một cỏch địa phương tại ứng dụng của tạ
- Cung cấp kiểu định dạng XML cho dữ liệu quan hệ và sử dụng cỏc cụng cụ như XSL Tranformation hay XML Path Language (Xpath) Query trờn dữ liệu của tạ
- Thực hiện việc xử lý dữ liệu mở rộng mà khụng cần mở một kết nối tới nguồn dữ liệụ
Nếu ta khụng cần những chức năng cung cấp bởi DataSet , ta cú thể sử dụng DataReader để trả về dữ liệu chỉ đọc trong ứng dụng của ta .
Ta cú thể viết .NET Provider cho nhiều nguồn dữ liệu khỏc nhaụ .NET Framework cú hai .NET Provider là: SQL Server Data Provider và OleDb Data Provider.
2.5.6 The SQL Server .NET Data Provider
SQL Server .NET Provider sử dụng giao thức riờng của nú để giao tiếp với SQL server. Nú thực hiện việc truy cập SQL server nhanh hơn bởi vỡ cú thể truy cập trực tiếp với SQL server mà khụng cần cầu nối OLE DB hay ODBC.
Minh hoạ sau đõy thể hiện sự khỏc nhau trong việc giao tiếp với SQL Server giữa SQL Server .NET Data Provider và OLE DB.
Comparison of the SQL Server .NET Data Provider and the OLE DB .NET Data Provider
Để sử dụng SQL Server .NET Data Provider, ta phải cú Microsoft SQL Server 7.0 hay cao hơn, lớp SQL Server .NET Provider được đặt trong System.DatạSqlClient NameSpacẹ Đoạn mó sau dựng để Import System.DatạSqlClient vào ứng dụng của tạ
Visual Basic]
Imports System.DatạSqlClient
2.5.7 OLE DB .NET Data Provider
Lớp OLE DB .NET Data Provider được chứa trong System.DatạOleDb namespace. Đoạn mó sau dựng để Import System.DatạSqlClient vào ứng dụng của tạ
[C#]
using System.DatạOleDb;
SQL Server .NET Provider cung cấp một chuỗi kết nối tương tự như chuỗi kết nối trong OLE DB (ADO)
Đoạn mó sau sẽ tạo và mở kết nối với cơ sở dữ liệu SQL Server (version 7.0 hoặc cao hơn):
[Visual Basic]
Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _
"Initial Catalog=northwind") nwindConn.Open()
Khi khụng cần thiết truy cập đến Cơ sở dữ liệu nữa thỡ ban nờn đúng lại bằng phương thức Close trong đối tượng Connection.
Để sử dụng OLE DB .NET Data Provider ban cần cú MSDAC 2.6 hoặc hơn.
Bảng sau đõy chỉ ra những provider đó được test với ADỌNET.
Driver Provider
SQLOLEDB Microsoft OLE DB Provider for SQL Server
MSDAORA Microsoft OLE DB Provider for Oracle Microsoft.Jet.OLEDB.4.0 OLE DB Provider for Microsoft Jet
2.5.8 Nền tảng cần thiết cho ADỌNET:
The Microsoft .NET Framework SDK (including ADỌNET) cài đặt trờn Microsoft Windows 2000, Microsoftđ Windows NT 4- Service Pack 6a, Microsoftđ Windows Millennium Edition, Microsoft Windows 98, và Microsoft Windows SẸ Sử dụng SQL Server .NET Data Provider hay OLE DB .NET Data Provider cần cài đặt Microsoft Data Access Components version 2.6 or later.
Để đưa ADỌNET vào ứng dụng cần khai bỏo NameSpace System.Data
[Visual Basic]
[C#]
using System.Data;
2.6 Truy cập Dữ liệu với ASP.NET
ASP.NET gồm cú cỏc cụng cụ để truy cập cơ sở dữ liệu khiến việc này trở nờn dễ dàng hơn bao giờ hết, cho phộp người dựng tương tỏc với cơ sở dữ liệu thụng qua trang Web.
Để truy cập cơ sở dữ liệu SQL với ASP.NET: 1. Tạo một cơ sở dữ liệu dựng lớp SqlConnection.
2. Truy xuất cỏc bản ghi từ cơ sở dữ liệu sử dụng SqlDataAdapter. 3. Đưa vào DataSet sử dụng SqlDataApdapter
4. Khi ta lựa chọn dữ liệu chỉ để hiển thị mà khụng tương tỏc, thỡ nờn dựng SqlDataReader hay OleDbDataReader cho cơ sở dữ liệu khụng phải SQL. Khi sử dụng SqlDataReader, việc lựa chọn bản ghi bằng truy vấn thụng qua SqlCommand và tạo SqlDataReader để lấy dữ liệu trả về từ đối tượng SqlCommand thụng qua phương thức ExecuteReader. Trong trường hợp ta muốn sặp xếp hay lọc lấy cỏc bản ghi thỡ ta tạo DataView dựa trờn DataSet
5. Ràng buộc dữ liệu với một server control
Ràng buộc dữ liệu với cỏc bảng trong cơ sở dữ liệu
Thường thỡ ràng buộc dữ liệu được thực hiện thường xuyờn từ cỏc nguồn dữ liệu lấy từ databasẹ Cỏc điều khiển trong ASP.NET cú thể cú cỏc giỏ trị được lấy dữ liệu từ cơ sở dữ liệụ
<%@ Page Language="vb" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.DatạSqlClient" %> <HTML>
<body>
<SCRIPT language="VB" runat="Server">
Sub Page_Load(Src As Object, E As EventArgs) Dim ds As DataSet
Dim dv As DataView
'create a connection to the Pubs databasộ conn = New SQLConnection _
("data source=localhost;initial catalog=pubs;integrated security=SSPI;persist security info=True;workstation
id=localhost;packet size=4096")
'create a dataset with information from the authors tablộ cmdAuthors = New SQLDataAdapter _
("select * from Authors", conn) ds = new DataSet()
cmdAuthors.Fill(ds, "Authors")
Listbox1.Datasource = ds(“Authors”).DefaultView Listbox1.Databind()
End Sub
<asp:Listbox id =“Listbox1” runat=”server” DataTextField=”AuthorName”
DataValueField=”AuthorID” />
2.6.1 Ràng buộc dữ liệu với Repeater Control
Repeater control là control ràng buộc dữ liệu kiểu danh sỏch. Khụng giống như DataList, Reapeter khụng trả về cỏc kiểu mẫu của nú với cỏc bảng HTML khụng được xõy dựng để hỗ trợ cho việc lựa chọn và sửa đổị
Ràng buộc dữ liệu với DataList Control