正确使用母版页

时间:2009-12-17 15:30:16

标签: asp.net master-pages

我一直在研究实现masterpages的不同方法。

  1. 仅将母版页用于布局,在每个页面上包含常用控件
  2. 在母版页上包含控件,使用母版页抽象基类并在母版页类中覆盖它的属性。这导致主页事件不再连线。我可能已经解决了这个问题,但只需要一个文本框值就可以了。
  3. 使用好的'ol Page.Master.FindControl()
  4. 我已经读过应该避免使用findcontrol(使用魔术“label1”字符串,据说使用太多资源)并且masterpages仅用于布局。如果masterpages仅用于布局,我是否可以在100页的页面中复制和粘贴常用控件?

    处理显示和访问常用网站控件(如搜索)的最佳做法是什么?考虑到替代方案,使用findcontrol获取母版页控件似乎并不那么糟糕。

2 个答案:

答案 0 :(得分:1)

MasterPages就像普通的Page对象一样。这意味着您可以通过公共属性公开内部控件,以允许子页面访问而无需求助于Master.FindControl()。要做到这一点,你只需要在页面中设置MasterType属性(我认为它甚至可以在没有设置的情况下工作,但是这样你可以获得智能感知支持并避免必须进行强制转换)。

这是一个基本的例子(抱歉,它是在VB中 - 这是从旧项目中复制和粘贴):

母版页(.master):

<%@ Master Language="VB" CodeFile="default.master.vb" Inherits="DefaultMaster" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form runat="server">
    <ASP:TextBox ID="Search" RunAt="Server"/>
    <ASP:ContentPlaceHolder ID="Content" RunAt="Server"/>
    </form>
</body>
</html>

主代码隐藏(.master.vb):

Partial Class DefaultMaster : Inherits MasterPage
    Public ReadOnly Property SearchBox() As TextBox
        Get
            Return Search
        End Get
    End Property
End Class

访问页面(.aspx):

<%@ Page Language="VB" MasterPageFile="default.master" CodeFile="page.aspx.vb" Inherits="ExamplePage" %>
<%@ MasterType TypeName="DefaultMaster" %>

<ASP:Content ContentPlaceHolderID="Content" RunAt="Server">
    <p>This is some content on the page.</p>
</ASP:Content>

访问代码隐藏页面(.aspx.vb):

Partial Class ExamplePage : Inherits Page
    Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs) Handles MyBase.Load
        Master.SearchBox.Text = "This page now has access to the master's search box."
    End Sub
End Class

答案 1 :(得分:0)

同意母版页仅用于布局,这是一种明智的方法,不会将公共控件分配给用户控件,并以这种方式将它们包含在母版页中。