母版頁調用內容頁的方法的簡單實現

  在內容頁中如何調用母版頁上的內容大家想必都已經知道,這裏我也不再囉嗦。我想介紹給大家的方法是如何在母版頁中如何調用內容頁的方法。
       母版頁給我們帶來了很多方便性,但也帶來了一個問題:在設計母版頁的時候,總會碰到需要在母版頁中調用內容頁的方法,但此時內容頁尚未設計,如何調用呢?下面就讓我用一個實例給大家講解一下:
      母版頁:MasterPage.master的頁面代碼如下:
<body>
    <form id="form1" runat="server">
    <table>
        <tr>
            <td>
                <asp:Button ID="CallContentMethod" runat="server" OnClick="CallContentMethod_Click"
                    Text="調用內容頁方法" />
                <asp:Label ID="welcomeMessage" runat="server" Text="這裏將顯示內容頁的歡迎信息"></asp:Label></td>
        </tr>
        <tr>
            <td>
                <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
                </asp:contentplaceholder>
            </td>
        </tr>
    </table>
    </form>
</body>
其中有一個按鈕和一個文本,其中的文本用來顯示內容頁的歡迎信息,按鈕用來調用內容頁的方法,但此時內容頁並不存在,那麼按鈕的單擊事件代碼如何寫呢?
      這裏我們需要引入一個頁面基類的概念,想必大家都清楚;aspx頁面只要求後臺類是繼承此Page類即可。所以我們先添加一個繼承自Page的頁面基類BasePage,然後讓頁面繼承自我們BasePage並重寫相關方法,利用運行時的動態性來解決此問題。相關代碼如下:
BasePage.cs:
public class BasePage :Page
{
    /// <summary>
    /// 輸出每個內容頁的歡迎信息,內容頁繼承此類並重寫此方法即可。此方法會由母版頁自動調用
    /// </summary>
    public virtual string SayHello()
    {
        return "這是頁面基類返回的歡迎信息!";
    }
}
母版頁的後臺代碼如下:
    BasePage currentPage = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        currentPage = Page as BasePage;
    }
    protected void CallContentMethod_Click(object sender, EventArgs e)
    {
        if (currentPage != null)
        {
            welcomeMessage.Text = currentPage.SayHello();
        }
    }
此處母版頁中定義一個成員變量指向BasePage,在PageLoad中將實際運行的頁面進行轉型,這樣在按鈕的單擊事件中就可以調用BasePage定義的SayHello方法了。又由於此方法是虛方法,在運行時綁定具體方法,即可實現我們的要求。
下面是內容頁的代碼:
Default.aspx.cs:
//注意類一定要繼承自自定義的基類,否則母版頁中轉型會失敗
public partial class Template_Default : BasePage
//重寫歡迎信息方法
    public override string SayHello()
    {
        return "這是來自內容頁的歡迎信息!";
    }


通過以上的步驟,我們就可以輕鬆實現在母版頁中調用內容頁的方法。如果想自動調用,只需要在母版頁的Page_Load方法中轉型後直接調用相關方法即可。

如果大家有更好的方法歡迎一起討論!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章