Tải bản đầy đủ (.pdf) (127 trang)

Tổng quan về ASP.NET 3.5 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (9.65 MB, 127 trang )










Tổng quan về ASP.NET 3.5



MỤC LỤC

1. ASP.NET là gì? 2
1.1 ASP.NET tích hợp với NET Framework 2
1.2 ASP.NET là đa ngôn ngữ 2
1.3 ASP.NET là hướng đối tượng (Object-Oriented) 2
1.4 ASP.NET được biên dịch 2
1.5 ASP.NET được lưu trữ trên máy bởi Common Language Runtime 3
1.6 ASP.NET dễ dàng triển khai và cấu hình 3
2. Các tính năng mới trong ASP.NET 3.5 3
2.1 ASP.NET AJAX 4
2.2 Các Control mới 4
2.3 LINQ 4
2.4 Các Assembly mới 4
2.5 ASP.NET Dynamic Data 4
2.6 ASP.NET MVC (Model View Control) 4
3. Cách tạo trang web trong Visual Studio 2008 5
3.1 Khởi động Visual Studio 2008 hoặc Visual Web Developer 2008 (hình 1) 5


3.2 Cách tạo dự án mới 5
3.3 Ví dụ 1 7
4. Giới thiệu về sự kiện (Event) trong ASP.NET 9
4.1 Một số tệp cơ bản trong ASP.NET 9
4.2 Chu kỳ sống của trang web trong ASP.NET (ASP.NET Page Life Cycle) 9
4.3 Một số các sự kiện của trang web (Page Event) 9
4.4 Sự kiện ứng dụng (Event Application) 10
5. Tài liệu tham khảo 11
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
2


Bài mở đầu

GIỚI THIỆU TỔNG QUAN VỀ ASP.NET 3.5


Bài này giới thiệu tổng quan về công nghệ ASP.NET 3.5 (Active Server Page). ASP.NET là gì? Giới
thiệu những tính năng mới của ASP.NET 3.5 sơ với ASP.NET 2.0. Cách tạo website trong Visual Studio 2008.

1. ASP.NET là gì?
Trước hết, tên đầy đủ của ASP.NET là Active Server Pages .NET (.NET ở đây là .NET framework). Nói
đơn giản thì ASP.NET là một công nghệ có tính cách mạng dùng để phát triển các ứng dụng về mạng hiện nay
cũng như trong tương lai. Bạn lưu ý ở chổ ASP.NET là một phương pháp tổ chức hay khung tổ chức (framework)
để thiết lập các ứng dụng hết sức hùng mạnh cho mạng dựa trên CLR (Common Language Runtime).
1.1 ASP.NET tích hợp với NET Framework
.NET Framework được chia thành bộ các tác vụ cho từng chức năng gồm các lớp (class), các cấu trúc
(structures), các giao diện (interfaces) và các lõi (core) thành phần chương trình. Trước khi sử dụng thành phần
nào bạn phải hiểu cơ bản về chức năng, các tổ chức của nó. Mỗi một trong hàng nghàn các tầng lớp được nhóm
theo trình tự logic, thứ bậc được gọi là một namespace. Mỗi namespace cung cấp một tính năng.

1.2 ASP.NET là đa ngôn ngữ
Để xây dựng một ứng dụng web chúng ta không chỉ chọn một ngôn ngữ mà có thể chọn nhiều ngôn ngữ
khác. Điều quan trọng là các ngôn ngữ chúng ta chọn mã của nó dịch được ra mã IL. Điều đó có nghĩa là IL là
ngôn ngữ của .NET và chỉ có CLR nhận biết được IL.
1.3 ASP.NET là hướng đối tượng (Object-Oriented)
ASP.NET là ngôn ngữ lập trình hướng đối tượng sử dụng các ngôn ngữ .NET. Nó cung cấp bộ các đối
tượng nhỏ và thực sự là một tầng làm việt trên nguyên lý của HTTP và HTML. Mã nguồn của chúng ta không
được truy cập toàn bộ các đối tượng trong .NET Framework nhưng có thể khai thác tất cả các quy ước của một
môi trường OOP (Object Oriented Programming). Chúng ta có tạo các lớp, giao diện, kế thừa các lớp… Chúng ta
có thể kiểm soát được các đối tượng trong chương trình như hiển thị dữ liệu và các sự kiện của đối tượng.
1.4 ASP.NET được biên dịch
Một ứng dụng ASP.NET luôn luôn được biên dịch, nó không chạy bằng mã của C# hoặc Visual Basic mà
không được biên dịch trước. Một ứng dụng ASP.NET thực sự được biên dịch thông qua 2 giai đoạn:
 Giai đoạn đầu tiên những các mã (code) bạn viết (C#, Visual Basic hoặc ngôn ngữ .NET khác)
được dịch bởi Microsoft Intermediate Language (MSIL). Giai đoạn dịch này được dịch tự
động khi trang wed đầu tiên yêu cầu. Chúng ta có thể thực hiện dịch trước. Các tệp được dịch
thành mã IL (Intermediate Language Code).
 Giai đoạn tiếp theo được dịch trước khi trang Web được thực thi. Tại giai đoạn này mã IL được
dịch thành bản mã máy (Native Machine Code). Giai đoạn này được gọi là Just-In-Time (JIT).


Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
3




















1.5 ASP.NET được lưu trữ trên máy bởi Common Language Runtime
Khía cạnh quang trọng nhất của công cụ ASP.NET là nó chạy trong môi trường thời gian thực (Runtime)
của CLR (Common Language Runtime). CLR là máy ảo (virtual machine) trong Microsoft .NET, do có ngôn
ngữ trung gian IL nên khi phát triển ứng dụng trên .NET, chúng ta không bị phụ thuộc vào thiết bị, có nghĩa là
theo Microsoft nói thì ứng dụng .NET có thể chạy trên bất kỳ thiết bị nào có .NET Framework. Tất cả các
namespace, các ứng dụng, các lớp trong bộ .NET Framework được gọi tắt là bộ quản lý mã. CLR cũng cung cấp
các dịch vụ quan trọng khác như:
 Quản lý bộ nhớ
 Thu nhặt rác
 Quản lý các tuyến
 Xử lý ngoại lệ
 An toàn
1.6 ASP.NET dễ dàng triển khai và cấu hình
Mọi sự cài đặt .NET Framework đều cung cấp các lớp như nhau. Để triển khai ứng dụng ASP.NET
chúng ta chỉ cần sao chép các tập tin vào thư mục ảo trên máy chủ (server) và máy chỉ chỉ cần có .NET
Framework.
Việc cấu hình dễ dàng đơn giản không phụ thuộc vào IIS (Internet Information Services). Cấu hình trong
ASP.NET được đặt trong tệp web.config. Tệp web.config được để cùng với thư mực chứa trang web của chúng

ta. Tệp web.config không bao giờ bị khóa, chúng ta có thể truy cập bất kỳ lúc nào, việc sửa tệp này hoàn toàn dễ
dạng vì chúng được lưu dưới dạng XML.
2. Các tính năng mới trong ASP.NET 3.5
Microsoft phát hành ASP.NET vào ngày 19 tháng 11 năm 2007 cùng với Visual Stutio 2008. Đây là
bước tiến hóa từ ASP.NET 2.0 tới ASP.NET 3.5. Nếu chúng ta đang sử dụng ASP.NET 2.0 để sử dụng ASP.NET
3.5 chỉ cần cài đặt thêm các tính năng mới của ASP.NET 3.5.
Code in VB.NET
VB.NET Compiler
Code in Another
.NET Language
Appropriate Compiler
Code in C#
C# Compiler
IL (Intermediate
Language) Code
Just-In-Time (JIT) Compiler
Native Machine
Code
Execute
The Common
Language Runtime
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
4

Trong phần này sẽ giới thiệu một số tính năng mới trong ASP.NET 3.5
2.1 ASP.NET AJAX
Trong ASP.NET 2.0, ASP.NET AJAX được cài đặt thêm vào. Tuy nhiên trong ASP.NET 3.5, ASP.NET
AJAX đã được tích hợp. vào trong .NET Framework, do đó quá trình xây dựng giao diện người dùng được dễ
dàng và trực quan. ASP.NET AJAX Control Extenders đã được tích hợp ToolBox của Visual Studio 2008. Các
tính năng của ASP.NET AJAX sẽ được trình bày ở bài sau.

2.2 Các Control mới
Các control ListView và DataPager có thể dùng mới kiểu dữ liệu mới LinqDataSource.
ListView linh hoạt hơn và có chứa toàn bộ tính năng của Gridview, Datagrid, Repeater trong
ASP.NET 2.0. Nó cung cấp các khả năng và chèn, xóa, sửa, sắp xếp, phân trang. Chúng ta hoàn toàn định dạng
được việc dữ liệu hiển thị trên ListView mà không cần phải sử dụng thẻ <table>. Các Template trong ListView
rất phong phú và đa dạng. Datager cung cấp cho ListView trong việc phân trang.
2.3 LINQ
LINQ (Language Integrated Query) đưa ra khả năng lập trình mới trong .NET. Giải pháp lập trình hợp
nhất, đem đến khả năng truy vấn dữ liệu theo cú pháp SQL trực tiếp trong C# hay VB.NET, áp dụng cho tất cả
các dạng dữ liệu từ đối tượng đến Cơ sở dữ liệu quan hệ và XML.
ASP.NET LinqDataSource cho phép chúng ta có thể sử dụng LINQ để lọc (filter), order và nhóm (group)
dữ liệu trước khi binding vào List Control.
2.4 Các Assembly mới
 System.Core.dll – Các implementation cho LINQ to Objects
 System.Data.Linq.dll - Các implementation cho LINQ to SQL
 System.Xml.Linq.dll - Các implementation cho LINQ to XML
 System.Data.DataSetExtensions.dll - Các the implementation cho LINQ to DataSet
 System.Web.Extensions.dll: Các implementation for ASP.NET AJAX
2.5 ASP.NET Dynamic Data
ASP.NET Dynamic Data cung cấp một Framework cho phép chúng ta nhanh chóng xây dựng một chức
năng ứng dụng driver-data, dựa trên LINQ to SQL hay Entity Framework. Nó cũng có thêm nhiều tính linh hoạt
cho các DetailsView, FormView, GridView, ListView trong kiểm tra tính hợp lệ của dữ liệu, hoặc chỉnh sửa lại
các mẫu để thay đổi cách hiển thị dữ liệu.
2.6 ASP.NET MVC (Model View Control)
Kiến trúc MVC là việc chia tất cả mục của một ứng dụng ra làm ba thành phần (component) khác nhau
Model, View và Controller:
Model: Model được giao nhiệm vụ cung cấp dữ liệu cho cơ sở dữ liệu và lưu dữ liệu vào các kho chứa
dữ liệu. Tất cả các nghiệp vụ logic được thực thi ở Model. Dữ liệu vào từ người dùng sẽ thông qua View được
kiểm tra ở Model trước khi lưu vào cơ sở dữ liệu. Việc truy xuất, xác nhận, và lưu dữ liệu là một phần của
Model.

View: View hiển thị các thông tin cho người dùng của ứng dụng và được giao nhiệm vụ cho việc nhận
các dữ liệu vào từ người dùng, gửi đi các yêu cầu đến bộ điều khiển, sau đó là nhận lại các phản hồi từ bộ điều
khiển và hiển kết quả cho người dùng. Các trang HTML, JSP, các thư viện thể và các file nguồn là một phần của
thành phần View.
Controller: Controller là tầng trung gian giữa Model và View. Controller được giao nhiệm vụ nhận các
yêu cầu từ phía máy khách. Một yêu cầu được nhận từ máy khách được thực hiện bởi một chức năng logic thích
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
5

hợp từ thành phần Model và sau đó sinh ra các kết quả cho người dùng và được thành phần View hiển thị.
ActionServlet, Action, ActionForm và struts-config.xml là các phần của Controller.
3. Cách tạo trang web trong Visual Studio 2008
3.1 Khởi động Visual Studio 2008 hoặc Visual Web Developer 2008 (hình 1)





















3.2 Cách tạo dự án mới
Chọn File → New Project (Ctrl+Shitf+N) hoặc New Web Site (Shift+Alt+N) (Hình 2)











Hình 1: Visual Web Developer 2008
Hình 2: Tạo dự án mới
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
6

 Nếu chọn New Project xuất hiện hộp hội thoại New Project sau (hình 3):
















Trong Project Type:
 Visual Basic → Web nếu chọn Visual Basic là ngôn ngữ viết ứng dụng.
 Visual C# → Web nếu chọn C# là ngôn ngữ viết ứng dụng.
Trong Templates chọn ASP.NET Web Application,.
Trong Name đặt tên cho Project, tên do ta đặt.
Trong Location là thư mục chứa Project.
 Nếu chọn New Web Site xuất hiện hộp hội thoại New Project sau (hình 4):

Hình 3
Hình 4
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
7

Trong Languge:
 Visual Basic → Web nếu chọn Visual Basic là ngôn ngữ viết ứng dụng.
 Visual C# → Web nếu chọn C# là ngôn ngữ viết ứng dụng.
Trong Templates chọn ASP.NET Web Application.
Trong Location là chọn Sysem File và Chọn tên và thư mực chứa Project.
3.3 Ví dụ 1













Ví dụ tạo một dự án có tên là “Vi_du_1”, đặt tại ổ đĩa D, chọn ngôn ngữ chọn là C# (hình 5) sau đó bấm
OK. Sau đó chúng ta được file “Default.aspx” (hình 6).















Hình 5
Hình 6
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
8


Trong ví dụ đầu tiên này chúng ta soạn một đoạn mã sau trong Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"

<html xmlns="
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<font face="verdana" color="red" size="20">Chào mừng bạn đến với ASP.NET
3.5 </font>
</div>
</form>
</body>
</html>
Để chạy chạy web này dưới dạng Deburg chúng ta chọn Deburg → Start Deburgging hoặc bấm phím
F5 (hình 7).











Kết quả khi chạy Vi_du_1 (hình 8)
Hình 7
Hình 8
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
9


4. Giới thiệu về sự kiện (Event) trong ASP.NET
4.1 Một số tệp cơ bản trong ASP.NET











Khi chúng ta xây dựng xong một ứng dụng Web:
 Phần giao diện của ứng dụng nằm trong ở các tệp .aspx và html.
 Tất cả các tệp mã nguồn (C#, VB.NET hoặc ngôn ngữ .NET) sẽ được biên dịch thành tệp .DLL và
nằm trong thư mục /Bin.
4.2 Chu kỳ sống của trang web trong ASP.NET (ASP.NET Page Life Cycle)
 Chu kỳ sống được bắt đầu khi trình duyệt yêu cầu một trang web gọi là Session.
 Chu kỳ sống vẫn tiếp tục nếu:
- Session đang hoạt động.

- Người sử dụng tương tác với giao diện web cho đến khi kích hoạt một sự kiện.
- Dữ liệu của trang (View State) wed được gửi về cho Server.
- Server nhận được View State và trả lại yêu cầu từ View State.
 Chu kỳ sống kết thúc khi:
- Người dùng kết thúc trình duyệt.
- Session kết thúc (timeout).
4.3 Một số các sự kiện của trang web (Page Event)
SỰ KIỆN
MIÊU TẢ
Pre_Init
Kiểm tra thuộc tính IsPostBack khi lần đầu tiên trang web đang được sử lý.
Tạo mới hoặc tạo mới lại các Control động (Dynamic Control).
Thiết lập trang chủ (Master page), thuộc tính Theme.
Đọc và thiết lập giá trị cho thuộc tính Profile.
Init
Làm nổi (Raised) sau khi các Control đã được khởi động và các Skin đã được
ứng dụng. Chúng ta sử dụng sử kiện này để đọc hoặc khởi tạo các thuộc tính của
Control.
TỆP
MIÊU TẢ
*.aspx
Tệp này chứa toàn bộ giao diện người dùng, các tùy chọn, các đoạn
code ứng dụng. Đây là một trong những trang web đầu tiên được bắt
đầu khi người sử dụng duyệt web.
*.cs
Tệp này chứa các mã nguồn của C#
web.config
Tệp tin dạng XML chứa cấu hình cho ứng dụng ASP.NET. Nó bao
gồm các cấu hình về an ninh, quản lý trạng thái, quản lý bộ nhớ…
global.asax

Chúng ta sử dụng tập tin này để khai báo các biến toàn cục và phản
ứng với các sự kiện toàn cục.
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
10

Load
Sử dụng sự kiện này để thiết lập thuộc tính cho Control, thiết lập các kết nối với
Cơ sở dữ liệu.
InitComplete
Sử dụng sự kiện này để xử lý các tác vụ có yêu cầu khi tất cả các khởi tạo hoàn
thành.
Unload
Trang được giải phóng khỏi bộ nhớ
Error
Khi xảy ra lỗi trong trang.
DataBinding
Server Control trên trang được gắn với nguồn dữ liệu
4.4 Sự kiện ứng dụng (Event Application)
SỰ KIỆN
MIÊU TẢ
Application_Start
Người dùng đầu tiên duyệt trang web.
Application_End
Khi không còn người dùng nào duyệt trang web.
Application_Error
Khi có lỗi xảy ra trong ứng dụng
Session_Start
Khi người dùng duyệt một trang web
Session_End
Khi người dùng đóng trình duyệt hoặc Session kết thúc (time out)


Ví dụ sau đếm số người truy cập và số người online
Chọn Project → Add New Item (hình 9).














Trong “Add New Item” chọn “Global Application Class” (hình 10).





Hình 9
Hình 10
Microsoft Vietnam – DPE team |Bài mở đầu: Giới thiệu tổng quan về ASP.NET 3.5
11

Trong file Global.asax soạn đoạn mã sau:


<%@ Application Language="C#" %>
<%@ Import Namespace="System.IO" %>
<script runat="server">

void Application_Start(object sender, EventArgs e)
{
if (!File.Exists("D:\\Dem.txt"))
File.WriteAllText("D:\\Dem.txt", "0");
Application["SNTruyCap"] = int.Parse(File.ReadAllText("D:\\Dem.txt"));
}

void Application_End(object sender, EventArgs e)
{

}

void Application_Error(object sender, EventArgs e)
{

}

void Session_Start(object sender, EventArgs e)
{
if (Application["SNOnline"] == null)
Application["SNOnline"] = 1;
else
Application["SNOnline"] = (int)Application["SNOnline"] + 1;

Application["SNTruyCap"] = (int)Application["SNTruyCap"] + 1;
File.WriteAllText("D:\\Dem.txt", Application["SNTruyCap"].ToString());

}

void Session_End(object sender, EventArgs e)
{
Application["SNOnline"] = (int)Application["SNOnline"] - 1;
}

</script>

5. Tài liệu tham khảo
1. Visual Web Developer, URL:
2. Microsoft ASP.NET, URL:
3. Bill Evjen, Scott Hanselman, Devin Rader, “Professional ASP.NET 3.5 In C# And VB”









MỤC LỤC

1. Dynamic Data là gì? 2
2. Các tính năng của Dynamic Data 2
3. Xây dựng ứng dụng Dynamic Data với LINQ to SQL 2
2.1 Tạo Project Dynamic Data 3
2.2 Xây dựng Cơ sở dữ liệu cho Project 4
2.3 Tạo DataContext với LINQ to SQL 5

2.4 Đăng ký DataContext 7
2.5 Thêm Custom Metadata vào Model 8
4. Câu hỏi ôn tập 13
5. Tài liệu tham khảo 14

Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
2


Bài 7
DYNAMIC DATA VỚI LINQ TO SQL
Bài này giới thiệu tổng quan về Dynamic Data, những tính năng của Dynamic Data. Cách xây dựng
ứng dụng Dynamic Data với LINQ to SQL.

1. Dynamic Data là gì?
 ASP.NET Dynamic Data cung cấp một Framework cho phép chúng ta nhanh chóng xây dựng
một chức năng ứng dụng driver-data, dựa trên LINQ to SQL hay Entity Framework .
 Dựa trên cấu trúc của CSDL mà Dynamic Data Framework (DDF) sẽ tạo nên các trang web cho
phép người dùng xem/chèn/xóa/sửa dữ liệu.
 Nhiều tính linh hoạt cho các DetailsView, FormView, GridView, ListView trong kiểm tra tính
hợp lệ của dữ liệu, hoặc chỉnh sửa lại các mẫu để thay đổi cách hiển thị dữ liệu.
 ASP.NET Dynamic Data mang đến cho chúng ta các tiện ích và RAD (Rapid Application
Development) để thay đổi dữ liệu các các control ASP.NET.
2. Các tính năng của Dynamic Data
 Web Scaffolding để tạo ra một ứng dụng web dựa trên các lược đồ cơ bản của cơ sở dữ liệu.
Dynamic Data scaffolding có thể tạo ra một chuẩn UI (User Interface – Giao diện người dùng)
từ các mô hình dữ liệu.
 Đầy đủ các thao tác (tạo, cập nhật, xóa bỏ, hiển thị) cho việc truy cập dữ liệu truy cập dữ liệu,
các thao tác về quan hệ giữa các bảng và kiểm tra tính hợp lệ của dữ liệu.
 Tự động hỗ quan các quan hệ khóa ngoài (foreign-key). Dynamic Data phát hiện ra các quan hệ

giữa các bảng và từ đó tạo ra các giao diện người dùng trên các bảng quan hệ.
 Khả năng tùy chỉnh các UI.
 Khả năng tùy chỉnh tính hợp lệ cho các trường dữ liệu.
3. Xây dựng ứng dụng Dynamic Data với LINQ to SQL
Để xây dựng một trang Web với Dynamic Data sẽ bắt đầu bằng cách sử dụng scaffolding. Dynamic Data
hỗ trợ mô hình dữ liệu LINQ to SQL và mô hình dữ liệu ADO.NET Entity Framework. Trong một ứng dụng web
của chúng ta có thể có nhiều loại mô hình dữ liệu nhưng để sử dụng Dynamic Data thì các mô hình dữ liệu phải
cùng kiểu.
Chúng ta phải đăng ký mô hình dữ liệu sử dụng Dynamic Data với file “Global.asax”. Sau khi mô hình
dữ liệu được đăng ký với Dynamic Data, dữ liệu mô hình có thể tự động thực hiện xác nhận các trường dữ liệu,
và nó cho phép chúng ta kiểm soát sự xuất hiện và hành vi của dữ liệu ở cấp độ tầng dữ liệu.
Trong ví dụ sau đây sẽ xây dựng một Project sử dụng Dynamic Data với mô hình dữ liệu LINQ to SQL.

Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
3


2.1 Tạo Project Dynamic Data
Để bắt đầu, File→New Web Site và chọn “Dynamic Data Entities Web Site” hay “Dynamic Data Web
Site”. Ở đây chúng ta dùng Dynamic Data với LINQ to SQL nên chọn “Dynamic Data Web Site” (Hình 1).









Trong Project này chúng ta đặt tên là Vi_du_7, ngôn ngữ là Visual C# sau đó bấm “OK”.

Khi đã tạo xong, bạn sẽ thấy một số Folder/File
được đưa vào trong Solution Explorer (Hình 2).
Trong đó sẽ có một Folder có tên là DynamicData,
bên trong chứa một số các Folder khác, và trong mỗi Folder
con này sẽ chứa các UserControl và các trang ASP.NET.













Hình 1: Tạo Project Dynamic Data với LINQ to SQL
Hình 2: Các Folder và File trong Dynamic
Data

Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
4

Hình 4: SQL Server Database
Hình 5: Tạo bảng cho My_Database.mdf


2.2 Xây dựng Cơ sở dữ liệu cho Project


̀
Folder “App_Data” trong “Solution Explore” click pha
̉
i chuô
̣
t cho
̣
n “Add New Item” (Hình 3).















Chọn “SQL Server Database”, trong ví dụ
này đặt tên cho CSDL là
“My_Database.mdf”, chọn ngôn ngữ là
“Visual C#”, sau đó bấm “Add” (Hình 4).










Để tạo Table cho “My_Database”, trong “Database Explore”
chúng click chuột phải vào Folder “Table” chọn “Add New Table”.
Trong ví dụ này chúng ta sẽ tạo 2 bảng:
SanPham gồm các trường:
Id, TenSanPham, DonGia, SoLuong, LoaiSanPham (Hình 6).
LoaiSanPham gồm các trường:
Id, TenLoaiSanPham (Hình 7).

Hình 3: Tạo Cơ sở dữ liệu

Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
5

Hình 8



































2.3 Tạo DataContext với LINQ to SQL
Trong ví dụ này chúng ta dùng LINQ to SQL
để truy cập vào CSDL My_Database.mdf.
Để tạo các lớp cho cho LINQ to SQL, trong
“Solution Explore” click chuột phải chọn “Add New

Item” (Hình 8).



Hình 6: Bảng SanPham trong CSDL My_Database.mdf
Hình 7: Bảng LoaiSanPham trong CSDL My_Database.mdf




Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
6

Hình 9: Tạo LINQ to SQL Classes



Hình 11:





Trong “Add New Item” (Hình 9) chọn
“LINQ to SQL Classes”, đặt tên tệp là
“MyDataClassess.dbml”, chọn ngôn ngữ là “Visual
C#”, sau đó bấm vào “Add” .
Sau khi bấm “Add” sẽ xuất hiện một thông
báo khuyên chúng ta nên đặt các file kiểu (LINQ to
SQL Class) vào trong thư mục “App_Code” của

Project. Chúng ta sẽ bấm “Yes” để các file
“MyDataClasses.dbml” sẽ được chứa trong thư mục
“App_Code”.




Mở file “MyDataClasses.dbml” trong thư mực “App_Code”, đánh dấu vào 2 bảng “LoaiSanPham”
và “SanPham”, kéo thả 2 bảng này vào file “MyDataClasses.dbml” (Hình 10).















Sau kéo thả 2 bảng này vào trong “MyDataClasses.dbml”
chúng ta sẽ tạo liên kết cho 2 bảng. Trong file
“MyDataClasses.dbml” click pha
̉
i chuô
̣

t cho
̣
n Add→Association
để tạo liên kết giư
̃
a 2 bảng (Hình 11).







Hình 10: Tạo file MyDataClasses với 2 bảng SanPham và LoaiSanPham



Hình 12: Tạo liên kết cho bảng LoaiSanPham và SanPham


Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
7


Chúng ta sẽ tạo liên kết giữa trường Id của bảng LoaiSanPham với trường LoaiSanPham của bảng
SanPham (Hình 12). Sau đó chúng ta bấm “OK” tạo được kết quả như Hình 13.








2.4 Đăng ký DataContext
Sau khi tạo ra DataContext, chúng ta mở tệp “MyDataClasses.designer.cs”, chương trình đã tạo cho
chúng ta một lớp có tên là MyDataClassesDataContext.
public partial class MyDataClassesDataContext : System.Data.Linq.DataContext
Chúng ta phải đăng ký MyDataClassesDataContext với hệ thống DynamicData. Mở file Global.asax,
Sửa:
//model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false });
Thành:
model.RegisterContext(typeof (MyDataClassesDataContext), new ContextConfiguration() { ScaffoldAllTables = true });
Khi đó chúng ta được file Golobal.asax như sau:
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.Web.DynamicData" %>

<script RunAt="server">
public static void RegisterRoutes(RouteCollection routes) {
MetaModel model = new MetaModel();

// IMPORTANT: DATA MODEL REGISTRATION
// Uncomment this line to register LINQ to SQL classes or an ADO.NET Entity Data
// model for ASP.NET Dynamic Data. Set ScaffoldAllTables = true only if you are sure
// that you want all tables in the data model to support a scaffold (i.e. templates)
// view. To control scaffolding for individual tables, create a partial class for
// the table and apply the [Scaffold(true)] attribute to the partial class.
// Note: Make sure that you change "YourDataContextType" to the name of the data context
// class in your application.
model.RegisterContext(typeof(MyDataClassesDataContext), new ContextConfiguration() { ScaffoldAllTables = true

});

// The following statement supports separate-page mode, where the List, Detail, Insert, and
// Update tasks are performed by using separate pages. To enable this mode, uncomment the following
// route definition, and comment out the route definitions in the combined-page mode section that follows.
routes.Add(new DynamicDataRoute("{table}/{action}.aspx") {
Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
Model = model
});

// The following statements support combined-page mode, where the List, Detail, Insert, and
// Update tasks are performed by using the same page. To enable this mode, uncomment the
// following routes and comment out the route definition in the separate-page mode section above.
//routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
Hình 13

Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
8

// Action = PageAction.List,
// ViewName = "ListDetails",
// Model = model
//});

//routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
// Action = PageAction.Details,
// ViewName = "ListDetails",
// Model = model
//});
}


void Application_Start(object sender, EventArgs e) {
RegisterRoutes(RouteTable.Routes);
}

</script>
Chúng ta vào Deburg→StartDebugging (hoặc F5) để chạy thử chương trình. Kết quả khi chạy chương
trình (Hình 14).








Khi click vào LoaiSanPhams kết quả như hình 15. Khi click vào SanPhams kết quả như hình 16.








2.5 Thêm Custom Metadata vào Model
Để thêm tùy biến các mục, chúng ta cần tạo lớp Metadata để nó cung cấp cho hệ thống Dynamic Data
thông tin về các thực thể. Đầu tiên bạn cần tạo thêm một lớp partial với cùng tên của lớp entity trong mô hình dữ
liệu, sau đó muốn thay đổi thuộc tính lên lớp này phải chỉ ra lớp Metadata cho lớp này.
Hình 14




Hình 15



Hình 16




Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
9

Trong ví dụ này chúng ta sẽ 2 lớp partial có tên là: LoaiSanPham và SanPham. Để thêm 2 lớp này chúng ta
làm như sau:
Click chuột phải vào “Add_Code” chọn “Add New Item”, trong hộp thoại “Add New Item”, chọn
“Class”, đặt tên cho file là “MyClass.cs”, chọn ngôn ngữ là “Visual C#”, sau đó bấm “Add” (Hình 17).













Mở file “MyClass.cs” khai báo thêm các namespace sau:
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
Thêm 2 lớp partial có tên là: LoaiSanPham, SanPham và tên lớp của MetadataType.
[MetadataType(typeof(LoaiSanPham_Metadata))]
public partial class LoaiSanPham
{
public class LoaiSanPham_Metadata
{
}
}
[MetadataType(typeof(SanPham_Metadata))]
public partial class SanPham
{
public class SanPham_Metadata
{
}
}
Các bảng muốn thay đổi tên hiển thị sử dụng thuộc tính TableName. Khi sử dụng thuộc tính này phải được
viết trong thân của lớp partial.
Các trường muốn thay đổi tên hiện thị sử dụng thuộc tính DisplayName
Các trường muốn có định dạng tùy biến sử dụng thuộc tính DisplayFormat
Các trường muốn ẩn khỏi giao diện sửa dụng thuộc tính ScaffoldColumn
Các trường muốn kiểu tra tính hợp lệ khi nhập sử dụng thuộc tính Required
Khi sử dụng các thuộc tính DisplayName,DisplayFormat,ScaffoldColumn,Required được viết trong thân của
lớp MetadataType.

Trong ví dụ này sử dụng các thuộc tính TableName, DisplayName để thay đổi giao diện hiện thị cho 2

bảng LoaiSanPham và SanPham. Sử dụng Required để kiểu tra việc nhập dữ liệu cho trường “SoLuong” và
“DonGia” của bảng SanPham.

using System;
using System.Collections.Generic;
Hình 17: Thêm file MyClass.cs




Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
10

using System.Linq;
using System.Web;
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
/// <summary>
/// Thay đổi cho các thuộc tính cho 2 bảng SanPham và LoaiSanPham
/// </summary>
[MetadataType(typeof(LoaiSanPham_Metadata))]
public partial class LoaiSanPham
{
partial void OnTenLoaiSanPhamChanging(string value)
{
if (Char.IsLower(value[0]))//Kiểm tự đầu tiên phải có phải là chữ hoa
{
throw new ValidationException("Tên loại sản phẩm ký tự đầu tiên phải là chữ hoa!");
}

}

[TableName("Loại sản phẩm")]//Sửa lại tên bảng "LoaiSanPham" thành "Loại sản phẩm"
public class LoaiSanPham_Metadata
{
[DisplayName("Tên loại sản phẩm")]//Sửa lại tên hiển thị cho trường TenLoaiSanPham
public object TenLoaiSanPham { get; set; }

[DisplayName("Sản phẩm")]
public object SanPhams { get; set; }
}
}

[MetadataType(typeof(SanPham_Metadata))]
public partial class SanPham
{
partial void OnTenSanPhamChanging(string value)
{
if (Char.IsLower(value[0]))//Kiểm tự đầu tiên phải có phải là chữ hoa
{
throw new ValidationException("Tên sản phẩm ký tự đầu tiên phải là chữ hoa!");
}
}

[TableName("Sản phẩm")]//Sửa lại tên bảng "SanPham" thành "Sản phẩm"
public class SanPham_Metadata
{
[DisplayName("Tên sản phẩm")]//Sửa lại tên hiển thị cho trường TenLoaiSanPham
public object TenSanPham { get; set; }


[DisplayName("Số lượng")]
[Required]
[Range(0, 300)]//Nhập số lượng trong khoảng từ 0 đến 300
public object SoLuong { get; set; }

[DisplayName("Đơn giá")]
[Required]
[Range(100000, 3000000000)]//Nhập đơn giá trong khoảng từ 100.000 đến 3.000.000.000
public object DonGia { get; set; }

[DisplayName("Loại sản phẩm")]
public object LoaiSanPham1 { get; set; }
}
}

Để sửa lại đổi giao diện của trang Master chúng ta mở file “Site.master”. Ví dụ chúng ta một số nội
dung do chương trình tạo ra bằng tiếng Anh và thay bằng tiếng Việt.
Sửa:

Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
11

<h1><span class="allcaps">Dynamic Data Site</span></h1>
Thành:
<h1 style="font-family:Times New Roman"><span class="allcaps">Dynamic Data VỚI LINQ to SQL</span></h1>
Sửa:
<a runat="server" href="~/"><img alt="Back to home page" runat="server"
src="DynamicData/Content/Images/back.gif" />Back to home page</a>
</div>
Thành:

<a runat="server" href="~/"><img alt="Trở về trang chủ" runat="server" src="DynamicData/Content/Images/back.gif"
/>Trở về trang chủ</a>
Trong file “Details.aspx” sửa một số giao diện tiếng Anh và thay bằng tiếng Việt.
<h2 style="font-family:Times New Roman">Chi tiết một bản ghi của bảng <%= table.DisplayName %></h2>

<asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="DetailsDataSource"
OnItemDeleted="DetailsView1_ItemDeleted"
CssClass="detailstable" FieldHeaderStyle-CssClass="bold" >
<Fields>
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="EditHyperLink" runat="server"
NavigateUrl='<%# table.GetActionPath(PageAction.Edit, GetDataItem()) %>'
Text="Sửa" />
<asp:LinkButton ID="DeleteLinkButton" runat="server" CommandName="Delete"
CausesValidation="false"
OnClientClick='return confirm("Bạn có chắc chắn xóa bản ghi này không?");'
Text="Xóa" />
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
Trong file “Edit.aspx” sửa lại <asp:DetailsView ID="DetailsView1" như sau:
<asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="DetailsDataSource" DefaultMode="Edit"
AutoGenerateEditButton="False" OnItemCommand="DetailsView1_ItemCommand"
OnItemUpdated="DetailsView1_ItemUpdated"
CssClass="detailstable" FieldHeaderStyle-CssClass="bold">
<Fields>
<asp:TemplateField>
<ItemTemplate>

<asp:Button ID="UpdateLinkButton" runat="server" CommandName="Update"
CausesValidation="false"
Text="Cập nhật" />
<asp:Button ID="Button1" runat="server" CommandName="Cancel" CausesValidation="false"
Text="Hủy bỏ" />
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
Trong file “Insert.aspx” sửa lại <asp:DetailsView ID="DetailsView1" như sau:
<asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="DetailsDataSource" DefaultMode="Insert"
AutoGenerateInsertButton="False" OnItemCommand="DetailsView1_ItemCommand"
OnItemInserted="DetailsView1_ItemInserted"
CssClass="detailstable" FieldHeaderStyle-CssClass="bold">
<FieldHeaderStyle CssClass="bold" />
<Fields>
<asp:TemplateField>

Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
12

<ItemTemplate>
<asp:Button ID="InsertLinkButton" runat="server" CommandName="Insert" Text="Thêm mới" />
<asp:Button ID="Button1" runat="server" CommandName="Cancel" CausesValidation="false"
Text="Hủy bỏ" />
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
Trong file “List.aspx” sửa lại <asp:GridView ID="GridView1" như sau:

<asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource"
AllowPaging="True" AllowSorting="True" CssClass="gridview">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="EditHyperLink" runat="server"
NavigateUrl='<%# table.GetActionPath(PageAction.Edit, GetDataItem()) %>'
Text="Sửa" />&nbsp;<asp:LinkButton ID="DeleteLinkButton" runat="server" CommandName="Delete"
CausesValidation="false" Text="Xóa"
OnClientClick='return confirm("Bạn có chắc chắn xóa bản nghi này không?");'
/>&nbsp;<asp:HyperLink ID="DetailsHyperLink" runat="server"
NavigateUrl='<%# table.GetActionPath(PageAction.Details, GetDataItem()) %>'
Text="Chi tiết" />
</ItemTemplate>
</asp:TemplateField>
</Columns>

<PagerStyle CssClass="footer"/>
<PagerTemplate>
<asp:GridViewPager runat="server" />
</PagerTemplate>
<EmptyDataTemplate>
Không có dữ liệu trong bảng!
</EmptyDataTemplate>
</asp:GridView>
Bây giờ chúng ta chạy thử chương trình. Các giao diện đã được sửa thành tiếng Việt. Chúng ta vào
Deburg→StartDebugging (hoặc F5) để chạy thử chương trình. Kết quả khi chạy chương trình file
“Defautl.axpx” (Hình 18).












Hình 18: Trang chủ của Vi_du_7




Microsoft Vietnam – DPE Team | Bài số 7: Dynamic Data với LINQ to SQL
13


Khi click vào “Loại sản phẩm” kết quả như hình 19 hoặc click vào “Sản phẩm” kết quả như hình 20.





































4. Câu hỏi ôn tập
1. Các tính năng của Dynamic Data?
Trả lời:
 Web Scaffolding để tạo ra một ứng dụng web dựa trên các lược đồ cơ bản của cơ sở dữ liệu.
Dynamic Data scaffolding có thể tạo ra một chuẩn UI (User Interface – Giao diện người dùng)

từ các mô hình dữ liệu.
 Đầy đủ các thao tác (tạo, cập nhật, xóa bỏ, hiển thị) cho việc truy cập dữ liệu truy cập dữ liệu,
các thao tác về quan hệ giữa các bảng và kiểm tra tính hợp lệ của dữ liệu.
 Tự động hỗ quan các quan hệ khóa ngoài (foreign-key). Dynamic Data phát hiện ra các quan hệ
giữa các bảng và từ đó tạo ra các giao diện người dùng trên các bảng quan hệ.
 Khả năng tùy chỉnh các UI.
 Khả năng tùy chỉnh tính hợp lệ cho các trường dữ liệu.
2. Dynamic Data hỗ trợ các các mô hình dữ liệu nào?
Hình 19: Giao diện của bảng LoaiSanPham



Hình 20: Giao diện của bảng SanPham



Hình 21: Thêm mới vào bảng SanPham



Hình 22: Sửa bản ghi của bản SanPham



×