Как отобразить серверный элемент управления ASP.NET, объявленный на базовой главной странице? - PullRequest
0 голосов
/ 03 апреля 2012

Мое решение, по нескольким причинам, в которые я сейчас не буду вдаваться, содержит несколько различных проектов веб-приложений ASP.NET, каждый из которых имеет несколько общих возможностей главной страницы.Для этого у меня есть отдельный проект библиотеки классов, на который ссылаются все проекты веб-приложений, в том числе класс BaseMasterPage, унаследованный от System.Web.UI.MasterPage.

Мое намерение состоит в том, чтобы все основныестраницы всех веб-приложений наследуются от 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>

Что бы ясоюзнику нравится, что нет необходимости добавлять HierarchicalMenu прямо на мой Site.master, как я это делал там, и сделать так, как это было с BaseMasterPage.

Спасибо!

1 Ответ

0 голосов
/ 03 апреля 2012

Я вижу три способа решения, оба из которых имеют свои достоинства и недостатки.

  1. Предоставьте новую виртуальную папку из виртуального каталога вашего приложения в IIS и сопоставьте ее с общим местоположением, где вы можете найти свой BaseMasterPage.master. Затем укажите главной странице вашего приложения, чтобы она была вложенной главной страницей BaseMasterPage.master (виртуальный путь, который будет указан, будет виртуальной папкой, которую мы создали). Точно так же все ваши веб-приложения будут иметь виртуальный каталог внутри себя, указывающий на это общее местоположение. Это хороший способ достижения вложенного визуального наследования

  2. В вашей BaseMasterPage вы можете динамически создавать элементы управления (не просто выставляя их как свойства) и добавлять их в тег Form в конструкторе BaseMasterPage.

  3. Возможно, вам придется взломать подход, при котором файл .master будет скомпилирован в сборку. Некоторые указатели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...