Asp.net 将复选框列表转换为字符串,保存到数据库,然后转换为数组

Asp.net 将复选框列表转换为字符串,保存到数据库,然后转换为数组,asp.net,arrays,stringbuilder,Asp.net,Arrays,Stringbuilder,我知道这个主题可能有点奇怪,但我不确定如何准确描述我的目标 我正在尝试在内容管理系统中执行一些基于角色的权限。我能想到的最好的方法是从数据库中提取角色列表,并将它们放在复选框列表中。然后,我将一个逗号分隔的检查值字符串保存到数据库的页面详细信息中。最后,当页面被拉回时,我通过拉下逗号分隔的字符串并将其拆分为string()并循环遍历这些值来检查当前用户是否具有权限 我担心的是,当我循环检查复选框列表并将值转换为字符串时,loop方法会在字符串的末尾添加一个逗号。。。然后,我必须在将逗号保存到数据

我知道这个主题可能有点奇怪,但我不确定如何准确描述我的目标

我正在尝试在内容管理系统中执行一些基于角色的权限。我能想到的最好的方法是从数据库中提取角色列表,并将它们放在复选框列表中。然后,我将一个逗号分隔的检查值字符串保存到数据库的页面详细信息中。最后,当页面被拉回时,我通过拉下逗号分隔的字符串并将其拆分为string()并循环遍历这些值来检查当前用户是否具有权限

我担心的是,当我循环检查复选框列表并将值转换为字符串时,loop方法会在字符串的末尾添加一个逗号。。。然后,我必须在将逗号保存到数据库之前去掉它

我的问题是,有没有更好的方法来实现这一点,这样我就不必在保存之前返回字符串并去掉后面的逗号

    ''# this is to get all selected items from
    ''# a checkboxlist and add it to a string
    ''# the reason for this is to insert the final string
    ''# into a database for future retrieval.
    Dim i As Integer
    Dim sb As StringBuilder = New StringBuilder()
    For i = 0 To CheckBoxList1.Items.Count - 1
        If CheckBoxList1.Items(i).Selected Then
            sb.Append(CheckBoxList1.Items(i).Value & ",")
        End If
    Next

    ''# now I want to save the string to the database
    ''# so I first have to strip the comma at the end
    Dim str As String = sb.ToString.Trim(",")
    ''# Then save str to the database

    ''# I have now retrieved the string from the 
    ''# database and I need to now add it to a One Dimensional String()
    Dim str_arr() As String = Split(str, ",")
    For Each s As String In str_arr
        ''# testing purposes only
        Response.Write(s & " -</br>")

        ''# If User.IsInRole(s) Then
        ''#     Do Stuff
        ''# End If
    Next
“”#这是从
''#一个复选框列表并将其添加到字符串中
''这样做的原因是插入最后一个字符串
''#输入数据库以备将来检索。
作为整数的Dim i
将某人调整为StringBuilder=新建StringBuilder()
对于i=0,检查boxList1.Items.Count-1
如果选中复选框列表1.项目(i).则
sb.追加(复选框列表1.项目(i).值和“,”)
如果结束
下一个
''现在我想把字符串保存到数据库中
''所以我首先要去掉结尾的逗号
Dim str As String=sb.ToString.Trim(“,”)
''然后将str保存到数据库中
''我现在已经从
''#数据库,我现在需要将其添加到一维字符串()
Dim str_arr()作为字符串=拆分(str,“,”)
对于str_arr中的每个s作为字符串
“仅用于测试目的
回答。写(s&“-
”) ''#如果User.IsInRole,则 “做事 ''#如果 下一个
将所有值放入字符串列表中,然后使用String.Join将它们连接起来。我不会对保持逗号分隔列表而不是用户与角色的一对多关系发表评论。:-)


如果使用ASP.NET成员身份,则可以为用户分配多个角色

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

可以考虑的事情。

< P>你可以简单地有一个数据库表,该表包含对该页的引用(按名称、路径或其他唯一ID),以及对该角色的引用?

我当然不是说这是最好的解决方案(无论如何),这只是一个例子:

角色表:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator
RoleId | PageId
2      | 8
2      | 9
1      | 9
页表:

PageId | PageName
8      | ~/Page1.aspx
9      | ~/OtherPlace/Page2.aspx
页面角色表:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator
RoleId | PageId
2      | 8
2      | 9
1      | 9

然后将数据存储在联接表中,在访问页面时,根据当前页面收回角色。当然,它根本不需要基于页面,您也可以轻松地使用权限替换我示例中的页面。

是的,我有我的会员资格和角色。这是页面上的角色权限。。。我也有这个问题,我的问题更多的是关于构建逗号分隔的字符串而不使用尾随逗号。谢谢你的输入。我正在使用内置的成员资格,所以我上面的问题与用户角色无关。。。我所做的是将角色放在一个字符串中,并将其附加到一个页面。我想我可以将页面与角色建立一对多的关系,但我只是觉得页面表中的一个字段就足够了。但是,除了使用逗号分隔的字符串外,我不知道如何在数据库中存储数组。列表=新列表()中的Dim值应该是新列表(字符串)中的Dim值是的,这也是一个好主意。。。这真的是我的第二个想法。我只是觉得用逗号分隔的字符串也一样简单。