基于CssClass启用或禁用ASP.NET WebForms控件

时间:2013-07-10 08:38:16

标签: jquery asp.net webforms

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

请注意我想编写应用DRY的逻辑我不想在每个页面中编写代码。

我脑子里有两个场景:

1 - 使用C#选择Code-Behind中的控件,但我有一个难点,我正在使用BaseClass方法Web.UI.Page - &gt; BaseClass - &gt; MasterPage - &gt;第I页使用以下代码片段并始终返回null this.Controls.OfType<WebControl>().Where(i => i.CssClass == "insert"),因为这将仅选择BaseClass中的控件。

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

请告诉我你的意见并告诉我是否有问题。

2 个答案:

答案 0 :(得分:2)

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

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

但是,您应该考虑CssClass属性的用途。它并不适合你想要做的事情;它真的打算应用造型。

如果您使用的是ASP.NET的成员资格提供程序及其角色提供程序,则可以使用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并不是特别困难,而且它会使事情变得非常干燥而且很容易改变

答案 1 :(得分:0)

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

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

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

对于您的问题,您可以从contentplaceholder

的表单层次结构中找到控件

但是你可以在每页加载时从主页面隐藏你的控制权限