V. Hiển thị với điều khiển Wizard
Chương 5 Thiết kế Website với MasterPage
Bạn đang gặp vấn đề thiết kế layout chung cho website của mình? MasterPage có thể là một đáp án tốt cho bạn giải quyết bài toán trên.
Với MasterPage để tạo một giao diện chung nhất cho Website của mình. Ví dụ website của bạn có layout gồm 5 phần banner, footer, left, right
Và content(phần chứa nội dung hiển thị cho các tin). Như vậy bạn có thể thấy trên trang web có các phần có cách trình bầy không thay đổi trong quá trình duyệt tin. banner, footer, left, right: bạn có thể để các phần này vào một MasterPage và tất các trang web trong website của bạn sẽ áp dụng layout này thông qua contentpage
I. Tạo MasterPage
Các bước tạo MasterPage giống với tạo các trang aspx bình thường nhưng trên hộp Add New Item bạn chọn MasterPage bạn thấy dưới ô đặt tên phần mở rộng của nó sẽ là Master. Bạn có thể tạo nhiều MasterPage cho ứng dụng web của mình.
Ví dụ: Code 1.
<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>MasterPage</title>
<style type="text/css">
html{ background-color:#e5e5e5; font-family:Verdana;} .content{ background-color:White; border:black 1px solid;
width:700px; margin:auto;}
.leftcolumm{ float:left; border-right:black 1px solid;
width:200px; padding:5px; height:300px}
.rightcolumm{ float:left; padding:5px; height:300px} </style>
</head> <body>
<form id="form1" runat="server">
<div class="content">
<div class="leftcolumm">
<asp:ContentPlaceHolder ID="contentplace1" runat="server"></asp:ContentPlaceHolder>
</div>
<div class="rightcolumm">
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </div> </form>
</body> </html>
Để sử dụng MasterPage cho các trang aspx bạn cần khai báo trên chỉ dẫn < %@ Page %> với thuộc tính MasterPageFile=”Tên _MasterPage của bạn”
ví dụ code 2
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" %>
<asp:Content ID="contentleft" ContentPlaceHolderID="contentplace1" runat="server">
Trinh bay menu Left<br />
Trinh bay menu Left<br />
Trinh bay menu Left<br />
Trinh bay menu Left<br /> </asp:Content>
<asp:Content ID="content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
Trinh bay noidung<br />
Trinh bay noidung<br />
Trinh bay noidung<br />
Trinh bay noidung<br /> </asp:Content>
Trên trang aspx bạn khai báo 2 điều khiển asp:content và trong thuộc tính của nó bạn thiết lập ContentPlaceHolderID=”Ten_Placeholder trong trang masterPage”.
Tạo một Content mặc định
Bạn không thể kết hợp một điều khiển Content với tất cả các điều khiển ContentPlaceHolder. Khi trên trang MasterPage của bạn có 3 ContentPlaceHolder mà trong trang aspx của bạn chỉ sử dụng hai điều khiển aspContent và chỉ đến 2 ContentPlaceHolder trên trang MasterPage khi đó mặc định ContentPlaceHolder thứ 3 vẫn được hiển thị.
Đăng ký Master Page trong WebConfiguration
Bạn có thể áp dụng MasterPage cho tất cả các trang trong một Folder hay tất cả các Content trong ứng dụng web của mình.
Thay vì việc trong mỗi trang aspx bạn phải gọi lời chỉ dẫn trang thẻ chỉ dẫn < %@ Page %> thì bạn có thể thêm nó vào trong file webconfiguration
Trong ví dụ dưới đây là cách bạn sẽ đăng ký một trang SimpleMasterPage vào ứng dụng web của mình để có thể áp dụng cho tất cả các trang trong foder(Sub Folder) chứa
Chú ý rằng file web.config này phải cùng nằm trong foleder đó: <system.web>
<pages masterPageFile="~/SimpleMasterPage.master" /> </system.web>
Sử dụng FindControl trong MasterPage.
Khi bạn cần chỉnh sửa hay lấy thông tin của 1 điều khiển từ MasterPage bạn có thể sử dụng phương thức FindControl() trong một Content Page
Ví dụ
Trang Findcontrol.master
<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="Findcontrol.master.cs" Inherits="Findcontrol" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Findcontrol</title> </head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblTitle" runat="server" /><br />
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder> </div> </form> </body> </html> Trang Findcontrol.aspx
<%@ Page Language="C#" MasterPageFile="~/Findcontrol.master"%>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
Label lbl = (Label)Master.FindControl("lblTitle"); lbl.Text = "Diễn đàn đại học Hoa Sen";
}
</script>
<asp:Content ID="content" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
Lay gia tri tu masterpage<br />
Lay gia tri tu masterpage<br />
Lay gia tri tu masterpage<br />
Lay gia tri tu masterpage<br />
Lay gia tri tu masterpage<br /> </asp:Content>
Trình bày thuộc tính MasterPage
Bạn có thể trình bày thuộc tính , phương thức từ MasterPage và có thể chỉnh sửa thuộc tính hay phương thức từ trang Content.
Trang Expose.master
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Expose.master.cs" Inherits="Expose" %>
<script runat="server">
public string BodyTitle {
get { return lblBody.Text; } set { lblBody.Text = value; } }
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Expose MasterPage Property</title> </head>
<body>
<form id="form1" runat="server">
<div>
<h1><asp:Label ID="lblBody" runat="server" Text="Sinh Viên Hoa Sen"></asp:Label></h1>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder> </div> </form> </body> </html> Trang Expose.aspx
<%@ Page Language="C#" MasterPageFile="~/Expose.master"
AutoEventWireup="true" %>
<%@ MasterType VirtualPath="~/Expose.master" %>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
Master.BodyTitle = "Diễn Đàn Sinh Viên Hoa Sen"; }
}
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
Property, Property, Property, Property, Property, <br />
Property, Property, Property, Property, Property, <br />
Property, Property, Property, Property, Property,<br />
Property, Property, Property, Property, Property<br /> </asp:Content>
Trong ví dụ trên bạn sẽ thấy một điểm mới đó là chỉ dẫn MasterType, để sử dụng được thuộc tính hay phương thức từ MasterPage ta phải thêm vào chỉ dẫn MasterType và đặt thuộc tính VirtualPath=”Ten_Mastepage”.