文字列へのチェックボックスリスト、データベースに保存してから、配列に変換します

StackOverflow https://stackoverflow.com/questions/2238874

  •  19-09-2019
  •  | 
  •  

質問

私は主題が少し奇妙かもしれないことを知っていますが、私の目標を正確に説明する方法がわかりませんでした

コンテンツ管理システムでいくつかの役割ベースの権限を実行しようとしています。これを行うために考えることができる最善の方法は、データベースから役割のリストを引き出し、チェックボックスリストに配置することです。そこから、チェックされた値のコンマ分離された文字列をデータベースのページの詳細に保存します。最後に、ページが引き戻されると、コンマ分離された文字列を引き下げて文字列()に分割し、値をループすることにより、現在のユーザーが許可を持っているかどうかを確認します。

私が持っている懸念は、チェックボックスリストをループして値を文字列に変換すると、ループメソッドが文字列の端にコンマを追加すると、データベースに保存する前にコンマをストリップする必要があるということです。

私の質問は、これを行うためのより良い方法はあります。

    ''# 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
役に立ちましたか?

解決

すべての値を文字列のリストに入れてから、string.joinを使用してそれらを連結します。私は、ユーザーと役割との1対多くの関係ではなく、コンマ区切りリストを保持することについてコメントしません。 :-)

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() )

他のヒント

おそらく、ページへの参照(名前、パス、または他の一意のIDなど)と役割への参照を含むデータベーステーブルを単に持っていますか?

私は確かにこれが(いずれにしても)最良の解決策だと言っているわけではありません、それは単なる例です:

ロールテーブル:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator

ページテーブル:

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

ページャーホールテーブル:

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

その後、データを参加テーブルに保存し、ページにアクセスすると、現在のページに基づいて役割を引き戻します。もちろん、ページに基づいてまったく基づいている必要はありません。私の例のページを許可を得て簡単に置き換えることができます。

ASP.NETメンバーシップを使用する場合、ユーザーに複数のロールを割り当てることができます。

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

考慮すべきことだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top