如何显示在基本主页上声明的ASP.NET服务器控件?

时间:2012-04-03 08:57:25

标签: asp.net inheritance master-pages

由于我现在不会涉及的几个不同原因,我的解决方案有几个不同的ASP.NET Web应用程序项目,所有这些项目都将共享母版页的几个功能。为了实现这一目标,我有一个单独的类库项目,所有Web App项目都引用该项目,其中包括一个继承自System.Web.UI.MasterPage的BaseMasterPage类。

我的目的是让所有Web应用程序的所有母版页继承自BaseMasterPage,它适用于常规属性和方法,但我现在正在尝试将我创建的服务器控件添加到BaseMasterPage并将其显示在实际的母版页,但我不知道如何从BaseMasterPage创建属性,在实际母版页上可以看到控件,而不需要很多丑陋的代码。

有人对如何做到有什么想法吗?

如果有帮助,这是我的BaseMasterPage的片段(HierarchicalMenu是我的自定义服务器控件):

public class BaseMasterPage : MasterPage
{
    private HierarchicalMenu _leftMenu;

    public HierarchicalMenu LeftMenu
    {
        get
        {
            return _leftMenu;
        }
        set
        {
            _leftMenu = value;
        }
    }
}

如果我将以下内容添加到我的Site.master页面,则会显示HierarchicalMenu,但它不是BaseMasterPage中属性声明的那个:

<%@ Master Language="C#" AutoEventWireup="true" Inherits="BaseMasterPage" %>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<body>
    <form runat="server">
        <cc1:HierarchicalMenu ID="LeftMenu" runat="server" MenuName="Left Menu" />
    </form>
</body>
</html>

我真的希望不要像我在那里那样直接在我的Site.master上添加HierarchicalMenu,并让它成为BaseMasterPage中的那个。

谢谢!

1 个答案:

答案 0 :(得分:0)

我可以看到解决这个问题的三种方法都有自己的优点和优点。 demertis。

  1. 从IIS中应用程序的虚拟目录中公开一个新的虚拟文件夹,并将其映射到一个公共位置,您可以在其中找到您的BaseMasterPage.master。然后指示应用程序中的Master页面是BaseMasterPage.master的嵌套母版页(要指定的虚拟路径将是我们创建的虚拟文件夹)。同样,您的所有Web应用程序都会在其自身内部指向此公共位置的虚拟目录。这是实现嵌套Visual继承的好方法

  2. 在BaseMasterPage中,您可以动态创建控件(不仅仅将它们公开为属性),并将其添加到BaseMasterPage构造函数中的Form标记中。

  3. 您可能必须破解.master文件将被编译到程序集的方法。一些指针是