0

我在成员资格提供者上有一个 Roles.GetAllRoles() 集合。现在我有一个角色“系统管理员”,我想从该列表中删除,以便在我的列表中使用。我该怎么做呢?

public void AssignUserToRoles_Activate(object sender, EventArgs e)
        {
            try
            {
                AvailableRoles.DataSource = Roles.GetAllRoles();
                AvailableRoles.DataBind();
            }
            catch (Exception err)
            {
                //
            }
        }
4

3 回答 3

2

无需在代码中添加任何额外的行即可实现。

public void AssignUserToRoles_Activate(object sender, EventArgs e)
        {
            try
            {
                AvailableRoles.DataSource = Roles.GetAllRoles().Except(new [] {"System Administrator"});
                AvailableRoles.DataBind();
            }
            catch (Exception err)
            {
                //
            }
        }

评论:不知道你为什么需要尝试...抓住这里。但无论如何,这个解决方案对我来说看起来很整洁。

于 2009-06-08T02:44:56.960 回答
0

如果您愿意,可以使用 LINQ 将数组转换为列表...

var roles = Roles.GetAllRoles().ToList();
roles.Remove("Administrator"); //Yank out the admin role...

AvailableRoles.DataSource = roles;
AvailableRoles.DataBind();

您的所有数据绑定都可以正常工作List<String>

更新:

ToList<T>()是一种扩展方法,它是 .Net 3.5 捆绑包的一部分。您需要确保您的项目以该框架版本为目标,并且您需要确保您的项目具有对 System.Core 的引用。

获得该引用后,您需要Using在代码所在的文件顶部添加一条语句:

using System.Linq;

如果您拥有所有这些东西,那么您应该开始看到一堆新的扩展方法出现在智能感知中。

于 2009-06-08T01:56:31.817 回答
0

Roles.GetAllRoles()返回一个字符串数组,您可以使用以下代码对其进行过滤:

        string[] roles = Roles.GetAllRoles();
        var v = from role in roles
                where role != "System Administrator"
                select role;

        AvailableRoles.DataSource = v;
        AvailableRoles.DataBind();
于 2009-06-08T01:56:32.657 回答