2010-02-10 99 views
0

我知道這個題目可能會有點怪,但我不知道如何準確地描述我的目標的CheckBoxList爲字符串,保存到數據庫,然後轉換成數組

我試圖做一些基於角色內容管理系統中的權限。我能想到的最好辦法是從數據庫中提取角色列表,並將它們放在CheckBoxList中。從那裏,我將檢查值的逗號分隔字符串保存到數據庫的頁面詳細信息中。最後,當頁面被拉回時,我通過拉下逗號分隔的字符串並將其拆分成一個String()並通過值循環來檢查當前用戶是否有權限。

我所關心的是,當我通過CheckBoxList循環並將值轉換爲字符串時,循環方法將逗號添加到字符串的末尾......然後我必須在保存之前去掉逗號數據庫。

我的問題是,有沒有這樣做,以便更好的辦法,我沒有去回字符串並保存前去掉尾隨逗號?

''# 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 

回答

1

把所有的值的字符串列表,然後使用的string.join將它們串聯。我不會評論保留用逗號分隔的列表而不是用戶與角色之間的一對多關係。 :-)

Dim values as List(Of String) = New List(Of String)() 
For i = 0 To CheckBoxList1.Items.Count - 1 
    If CheckBoxList1.Items(i).Selected Then 
     values.Add(CheckBoxList1.Items(i).Value) 
    End If 
Next 

Dim str As String = String.Join(",", values.ToArray()) 
+0

感謝您的意見。我正在使用內置的成員資格,所以我的問題與用戶對角色沒有任何關係......我正在做的是將角色放在一個字符串中並將其附加到頁面上。我想我可以做一對多的頁面到角色的關係,但我只是覺得頁表中的單個字段就足夠了。但是,我不知道如何將數組存儲在數據庫中,而不是使用逗號分隔的字符串。 – 2010-02-10 19:19:06

+0

昏暗值列表 =新名單()應作爲新的列表(串) – 2010-02-10 19:36:00

+0

我已經更新了代碼尺寸值。 – tvanfosson 2010-02-10 19:37:29

-1

如果您使用ASP.NET成員身份,則可以爲用戶分配多個角色。

Roles.AddUserToRoles(username, roles); 

Roles.IsUserInRole(role); 

只是要考慮。

+0

是的我有我的會員資格和角色下拍。這是頁面上的角色權限......我也是這樣,我的問題更多的是關於如何構建逗號分隔的字符串而不使用尾隨逗號。 – 2010-02-10 19:16:41

1

你能或許只需包含對頁面的引用數據庫表,並以角色的引用(按名稱,路徑,或其他一些獨特的ID吧)?

我當然不會說這是最好的解決方案(以任何方式),它只是一個例子:

角色表:

RoleId | RoleName 
_________________ 
1  | Editor 
2  | Administrator 

頁表:

PageId | PageName 
8  | ~/Page1.aspx 
9  | ~/OtherPlace/Page2.aspx 

PageRole表:

RoleId | PageId 
2  | 8 
2  | 9 
1  | 9 

然後,您會將數據存儲在加入表中,並且在訪問該頁面時會根據當前頁面撤回您的角色。當然,它不必基於頁面,你可以像在Permission中一樣輕鬆地將頁面替換爲我的示例。

+0

是的,這也是一個好主意......這是我的第二個想法。我只是覺得用逗號分隔的字符串會很容易。 – 2010-02-10 19:20:07

相關問題