0

我想启用或禁用基于 CssClass 的 ASP.NET Contorls,例如,我为 ASP.NET 页面中的一个按钮设置了插入 CssClass,并检查用户是否有权插入,如果用户有权限,我将启用该按钮,如果没有我将禁用该按钮。

请注意,我想编写适用于 DRY 的逻辑,我不想在每一页中都编写代码。

我脑子里有两种情况:

1-使用 C# 选择代码隐藏中的控件,但我有一个困难我正在使用 BaseClass 方法 Web.UI.Page --> BaseClass --> MasterPage --> Page 我使用以下代码片段和它总是返回 nullthis.Controls.OfType<WebControl>().Where(i => i.CssClass == "insert")因为这只会选择 BaseClass 中的控件。

2-创建WebMethod从后面的代码中选择权限,并使用jQuery按类选择元素并根据权限启用或禁用它们。

请给我您的意见,并告诉我是否有问题。

4

2 回答 2

2

如果您希望(必须)使用它们的 CssClass 属性隐藏它们,最好在服务器上,在您的基类中,如场景 1 中所述。但是请记住,这this.Controls只是控制树中的一层。如果您希望包含所有控件,则需要递归地扫描控件树。为了在动态内容上也能实现这一点(例如ItemTemplates在 a中生成ListView等),您需要确保在所有内容都呈现时执行此操作。

不建议在客户端执行此操作,因为恶意用户只需打开开发工具并再次显示插入按钮并不难

但是,您可能应该考虑 CssClass 属性的用途。它并不真正适合您尝试做的事情;它实际上是为了应用样式。

如果您使用 ASP.NET 的 Membership Provider 并且它是 Role Provider,则可以使用asp:LoginView来限制呈现,如下所示:

<asp:LoginView runat="server">
    <RoleGroups>
        <asp:RoleGroup Roles="CanInsert"> <!--Roles can be anything-->
            <ContentTemplate>
                <!--Insert button or w/e here-->
            </ContentTemplate>
        </asp:RoleGroup>
    </RoleGroups>
</asp:LoginView>

如果您不使用内置的会员提供程序,LoginView则自己滚动并不是特别困难,它使事情变得非常干燥但易于更改

于 2013-07-10T08:58:47.687 回答
0

如果你想从服务器端这样做,你有很多方法可以做到这一点

1-创建2个css类,一个用于隐藏,另一个用于显示,然后在页面加载时更改contorl的css

*- 当您在页面加载时更改 csscalass 属性时,因为所有控件呈现时都为 cssclass 选择了您的属性

对于您的问题,您可以从 contentplaceholder 的分层表单中找到控件

但是您可以在每次加载页面时根据母版页的权限隐藏您的控件

于 2013-07-10T09:01:22.040 回答