احتمالا تا به حال از Master Page استفاده کرده
اید و این نیاز را داشته اید که یک متد یا یک صفت (Property) که در یک
Master Page تعریف شده را از درون یک فرم (Web form) فراخوانی کنید.اولین
چیزی که ممکن است به ذهنتان برسد، استفاده از دستوری مانند
()Master.MethodName باشد. ولی همچین چیزی کار نمی کند. خوشبختانه یک راه
ساده برای این کار وجود دارد. ابتدا یک مرور سریع روی چگونگی ساخت Master
Page میکنیم و سپس به ارائه بحث اصلی می پردازیم.
چگونگی ساخت یک Master Page برای استفاده در
یک فرم
یک وبسایت جدید ASP.NET در ویژوال استودیو ایجاد
می کنیم، این پروژه خود شامل فایل default.aspx است. یک Master Page به نام
DefaultLayout.master در همان مسیر اصلی وبسایت ایجاد کنید. تمام محتویات
فابل جدید را مطابق شکل زیر تغییر دهید:
<%@ Master
Language="C#"
AutoEventWireup="true"
CodeFile="
DefaultLayout.master.cs"
Inherits="_Default" %>
<!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></title>
<asp:ContentPlaceHolder
id="head"
runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form
id="form1"
runat="server">
<div>
<h1><asp:Label
ID=
"lblHeading"
runat="server"
/></h1>
<asp:ContentPlaceHolder
id="MainPageContent"
runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
همانطور که می بینید، یک کنترل Label
به نام lblHeading و یک کنترل ContentPlaceHolder به نام
MainPageContent را در آین فایل قرار دهید. Label کنترلی است که می خواهیم
یک متغیر را از فرم default.aspx در ان قرار دهیم، به وسیله یک متد درون
MasterPage. ContentPlaceHolder برای
قرار دادن محتوا در فایل default.aspx است.
حال متد ساده زیر را در فایل default.master تعریف میکنیم.
public void
SetPageHeading(string
heading)
{
lblHeading.Text
= heading;
}
این متدی است که قرار است از فایل کد
default.aspx به آن دسترسی داشته باشیم. پارامتر PageHeading برای مقدار
دادن به label به کار می رود.
حال به فایل default.aspx می رویم و کد آن را
مطابق زیر تغییر دهید.
<%@ Page
Language="C#"
AutoEventWireup="true"
MasterPageFile="~/
DefaultLayout.master"
CodeFile="Default.aspx.cs"
Inherits="_Default"
%>
<asp:Content
ID="HomePageContent"
ContentPlaceHolderID="MainPageContent"
runat="server">
</asp:Content>
دسترسی به
متد های Master Page از درون فرم
تنها چیزی که باقی مانده قرار دادن label درون
فایل Master Page از طریق کد است. به Code View فایل default.aspx بروید و
در رویداد Page_Load آن قطعه کد زیر را قرار دهید
protected
void
Page_Load(object
sender,
EventArgs e)
{
((DefaultLayout)this.Master).SetPageHeading("This
heading is set from
inside Default.aspx");
}
این مهمترین خط از تمام این این آموزش است. شیئ
this.Master را به شکل DefaultLayer در می آورد (cast می کند) که نوع
MasterPage در این سایت است (دقت کنید که نام Master Page ما DefaultLayout
است) بعد از تبدیل، متد به صورت عادی مانند هر متد دیگری قابل دسترسی است.
دسترسی به کنترل های Master Page از درون فرم
اگر می خواهید به کنترل های درون Master Page
دسترسی داشته باشید، باید از متد ()FindControl مطابق زیر استفاده کنید:
protected void
Page_Load(object
sender,
EventArgs e)
{
Label
lblHeading;
lblHeading = (Label)Master.FindControl("lblHeading");
lblHeading.Text
= "This heading is set from inside
Default.aspx";
}