我有一个特定页面,并且根据管理员角色,必须插入许多额外的验证控件。但是,我不想承担为其他用户启用验证器的风险。
我在想的是使用某种形式的“视觉继承”,但我不知道选择哪条路径。也许有单独的.aspx页面继承自同一个类(继承自Page)?
旁注:这必须在 webforms,而不是mvc 中完成。
额外信息:我正在尝试解决的问题是角色的分离和对页面的影响,而不必复制页面并且必须维护两者中的任何更改。有些客户可以看到vanilla页面,管理员可以看到相同的信息,但添加了验证控件。但是,客户端不应该看到这些验证控件。此外,还可以看到更多信息,但可以通过使用基于角色的查看某些用户控件来处理。
有人对此有所了解吗?
答案 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部分 - 您必须自己实例化所有控件,以及分配其属性。在大多数情况下,这将非常混乱。