【问题标题】:How can I display a ASP.NET server control that is declared on a base master page?如何显示在基本母版页上声明的 ASP.NET 服务器控件?
【发布时间】:2012-04-03 17:12:38
【问题描述】:

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

我的意图是让所有 Web 应用程序的所有母版页都从 BaseMasterPage 继承,这对于常规属性和方法工作正常,但我现在正尝试将我创建的服务器控件添加到 BaseMasterPage 并将其显示在实际的母版页,但我不知道如何使 BaseMasterPage 中的属性在实际母版页上可见,而没有很多丑陋的代码。

有人对如何做到这一点有任何想法吗?

如果有帮助,这是我的 BaseMasterPage 的 sn-p(而 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 中的那个。

谢谢!

【问题讨论】:

  • 其实我刚刚发现,当我在 BaseMasterPage 的代码上操作 LeftMenu 时,LeftMenu我的 Site.master 已更新,因此添加到 Site.master 的 HierarchicalMenu 以某种方式链接到 BaseMasterPage 中的同名属性。

标签: asp.net inheritance master-pages


【解决方案1】:

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

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

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

  3. 您可能不得不破解一种将 .master 文件编译为程序集的方法。一些指针是

【讨论】:

  • 谢谢,拉梅什。这是好东西。目前我已经用我的 Site.master 对其进行了整理,它的代码文件部分类继承了我的 BaseMasterPage。然后,我将 BaseMasterPage 具有的相同控件添加到我的 Site.master,具有相同的名称,并在我的 Site.master 的 Page_Load 上为我的所有控件执行此操作:base.MyControl = this.MyControl。这种方法的问题是我总是会收到警告说 SiteMaster.MyControl 隐藏了继承的成员 BaseMasterPage.MyControl,但一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
相关资源
最近更新 更多