Визуальное наследование в ASP.NET без главных страниц - PullRequest
0 голосов
/ 29 июля 2009

У меня есть определенная страница, и в зависимости от роли администратора необходимо добавить много дополнительных элементов проверки. Однако я не хочу рисковать включением валидатора для других пользователей.

Я думал о том, чтобы использовать некоторую форму «визуального наследования», но я не знаю, какой путь выбрать. Возможно, есть отдельные страницы .aspx, которые наследуются от одного и того же класса (который наследуется от Page)?

Примечание: это должно быть сделано в веб-формах, а не в mvc .

Дополнительная информация. Проблема, которую я пытаюсь решить, - это разделение ролей и влияния на страницу без дублирования страницы и необходимости поддерживать любые изменения в обеих. Есть клиенты, которые видят ванильную страницу, и администраторы могут видеть ту же информацию, но с добавленными средствами проверки. Однако эти средства проверки не должны рассматриваться клиентами. Также можно увидеть некоторую дополнительную информацию, но ее можно обработать, используя просмотр на основе ролей определенного пользовательского элемента управления.

У кого-нибудь есть идеи по этому поводу?

Ответы [ 3 ]

2 голосов
/ 29 июля 2009

Если проблема, которую вы пытаетесь решить, заключается в просмотре элементов управления на основе ролей, и вы используете встроенные поставщики членства / роли asp.net, вы можете использовать элемент управления LoginView для управления видимостью административного материала:

<asp:LoginView runat="server" ID="LoginView">
    <RoleGroups>
        <asp:RoleGroup Roles="Admin">
            <ContentTemplate>
                Special Admin content
                <asp:RequiredFieldValidator></asp:RequiredFieldValidator>

            </ContentTemplate>
        </asp:RoleGroup>
    </RoleGroups>
</asp:LoginView>
2 голосов
/ 29 июля 2009

Почему вы не хотите использовать мастер-страницы? Главные страницы делают именно то, что вы хотите - они даже могут «наследовать» друг от друга (в некотором смысле).

Я бы посоветовал вам использовать главные страницы , чтобы делать то, что вы хотите.

Главные страницы ASP.NET позволяют создать последовательный макет для страницы в вашем приложении. Один главная страница определяет внешний вид и стандартное поведение, которое вы хотите для всех страниц (или группы страниц) в вашем приложении. Вы можете затем создать отдельные страницы контента которые содержат контент, который вы хотите дисплей. Когда пользователи запрашивают содержательные страницы, они сливаются с главная страница, чтобы произвести вывод, который сочетает в себе макет главной страницы с содержанием из содержания стр.

0 голосов
/ 29 июля 2009

Часто такие проблемы можно решить, разделив страницу на пользовательские элементы управления (.ascx). Это может стать немного грязным, но делает работу.

Наследование страниц сложно, хотя возможно. Вы должны понимать, что одна страница .aspx не может наследоваться от другой страницы .aspx. Это связано с тем, как работает компилятор ASP.NET: ваша разметка .aspx XML скомпилирована в класс, производный от вашего класса code-behind. Так как это происходит только во время выполнения, вы не можете получить от нее другую страницу .aspx, потому что класс просто не существует во время компиляции кода.

Что вы можете сделать, это создать еще один класс, наследующий от Page, и сделать так, чтобы ваши классы .aspx code-behind наследовали от него. Это возможно, но учтите, что в этом классе не будет XML-части .aspx - вам придется создавать экземпляры всех элементов управления самостоятельно, а также назначать их свойства. В большинстве случаев это будет довольно грязно.

...