由于我现在不会涉及的几个不同原因,我的解决方案有几个不同的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中的那个。
谢谢!
答案 0 :(得分:0)
我可以看到解决这个问题的三种方法都有自己的优点和优点。 demertis。
从IIS中应用程序的虚拟目录中公开一个新的虚拟文件夹,并将其映射到一个公共位置,您可以在其中找到您的BaseMasterPage.master。然后指示应用程序中的Master页面是BaseMasterPage.master的嵌套母版页(要指定的虚拟路径将是我们创建的虚拟文件夹)。同样,您的所有Web应用程序都会在其自身内部指向此公共位置的虚拟目录。这是实现嵌套Visual继承的好方法
在BaseMasterPage中,您可以动态创建控件(不仅仅将它们公开为属性),并将其添加到BaseMasterPage构造函数中的Form标记中。
您可能必须破解.master文件将被编译到程序集的方法。一些指针是