Kỹ thuật thiết kế web application linh động và load động user control

Một phần của tài liệu Tìm hiểu và xây dựng hệ thống framework hỗ trợ các hình thức trắc nghiệm (Trang 134 - 136)

control

Bình thường, khi thiết kế web, đa phần trong chúng ta đều thiết kế theo kiểu: mỗi khi cần một trang web, chúng ta tạo ra một file aspx. Đó thật sự là một trang web. Tuy nhiên, giả sử khi chúng ta cần thay đổi style của cả website thì sao!. Lúc ấy, chúng ta phải đi đến từng trang aspx, sửa những vị trí màu sắc, font chữ trực tiếp hoặc trong các style được định nghĩa, hoặc ít nhất thì cũng phải là sửa đường dẫn đến file định kiểu css.

Như vậy, cách thiết kế như vậy tỏ ra có nhiều bất tiện và tiêu tốn rất nhiều thời gian. Thay vào đó, chúng ta nên thiết kế theo hướng sau:

o Cả website sẽ chỉ có một vài trang web thật sự, tức là chỉ có 3 hay 4 trang aspx thật sự mà thôi. Các trang web này sẽ đóng vai trò là các cổng vào trung tâm cho trang web.

o Mỗi khi thêm một chức năng gì có cần đến việc thêm một trang web, thay vì thêm vào một trang web thật sự, chúng ta thêm vào một user control.

o Trên trang web thật, trong liên kết đến chức năng này, chúng ta để nó liên kết đến chính nó với tham số module là chỉđến user control chúng ta cần.

o Sau đó, chúng ta sẽ thực hiện việc load động các user control này. Nếu user control này là một phần của project đang thực hiện, chúng ta chỉ việc dùng lệnh LoadControl và truyền vào đường dẫn đến file ascx (file user control) mà ta cần. Nếu user control này được phát triển trong một project khác, ngoài việc trên, chúng ta còn cần chép file dll xử lý (nếu có) của user control vào thư mục bin của ứng dụng web.

o Sau khi gọi hàm LoadControl, chúng ta được trả về một đối tượng Control.

o Trong trang web aspx, ta có thể dùng một đối tượng nào đó làm place holder, thông thường là một cell của một table. Cell này được đặt thuộc tính là runat=server và id=”tên place holder”, giả sửđược đặt là placeHolder.

o Khi lấy được đối tượng Control rồi, ta gọi tiếp lệnh: placeHolder.Controls.Add (myControl);

o Như vậy, ta đã hoàn thành việc load động các control vào website của chúng ta thông qua trang web với vai trò là cổng thông tin.

Code minh họa:

string module = Request.QueryString["module"];

string filename = "UserControls/";

switch(module) { case "news": filename += "NewsListContainer.ascx"; break; case "createnews": filename += "CreateNews.ascx"; break; case "viewnewsdetail": filename += "NewsDetail.ascx"; break; case "sampletest": filename += "ViewSampleQuestion.ascx"; break; case "testlist": filename += "CustomTestList.ascx"; break; case "configui": filename += "ConfigUI.ascx"; break; default: filename += "DefaultControlPage.ascx"; break; } UserControl ctrl = (UserControl)LoadControl(filename); MainPlaceHolder.Controls.Clear(); MainPlaceHolder.Controls.Add(ctrl);

Một phần của tài liệu Tìm hiểu và xây dựng hệ thống framework hỗ trợ các hình thức trắc nghiệm (Trang 134 - 136)