没有母版页的ASP.NET中的可视继承

时间:2009-07-29 12:46:14

标签: asp.net visual-inheritance

我有一个特定页面,并且根据管理员角色,必须插入许多额外的验证控件。但是,我不想承担为其他用户启用验证器的风险。

我在想的是使用某种形式的“视觉继承”,但我不知道选择哪条路径。也许有单独的.aspx页面继承自同一个类(继承自Page)?

旁注:这必须在 webforms,而不是mvc 中完成。

额外信息:我正在尝试解决的问题是角色的分离和对页面的影响,而不必复制页面并且必须维护两者中的任何更改。有些客户可以看到vanilla页面,管理员可以看到相同的信息,但添加了验证控件。但是,客户端不应该看到这些验证控件。此外,还可以看到更多信息,但可以通过使用基于角色的查看某些用户控件来处理。

有人对此有所了解吗?

3 个答案:

答案 0 :(得分:2)

为什么不想使用母版页?母版页完全符合您的要求 - 它们甚至可以相互“继承”(以某种说法)。

我建议你使用master pages做你想做的事。

  

ASP.NET母版页允许您   为。创建一致的布局   应用程序中的页面。单身   母版页定义了外观   和你想要的标准行为   对于所有页面(或一组   您的应用程序中的页面)。您可以   然后创建单独的内容页面   包含您想要的内容   显示。当用户请求时   内容页面,他们合并   母版页生成输出   结合母版页的布局   与内容的内容   页。

答案 1 :(得分:2)

如果您要解决的问题是基于角色的控件查看,并且您正在使用内置的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 :(得分:0)

通常可以通过将页面拆分为用户控件(.ascx)来解决此类问题。它可能会变得有点混乱,但完成工作。

虽然可能,但页面的继承很困难。您必须意识到的是,一个.aspx页面无法从另一个.aspx页面继承。这是因为ASP.NET编译器的工作原理:您的.aspx XML标记被编译成一个派生自您的代码隐藏类的类。由于这只发生在运行时,因此不能再继承其中的.aspx页面,因为在编译代码隐藏时,类就不存在了。

您可以做的是创建另一个继承自Page的类,并使您的.aspx代码隐藏类继承自该类。这是可能的,但请注意,此类将不具有.aspx XML部分 - 您必须自己实例化所有控件,以及分配其属性。在大多数情况下,这将非常混乱。