checkboxList to String, 데이터베이스로 저장 한 다음 배열로 변환합니다.

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

  •  19-09-2019
  •  | 
  •  

문제

나는 주제가 조금 이상하다는 것을 알고 있지만 내 목표를 정확하게 설명하는 방법을 확신하지 못했습니다.

콘텐츠 관리 시스템에서 역할 기반 권한을 수행하려고합니다. 내가 생각할 수있는 가장 좋은 방법은 데이터베이스에서 역할 목록을 가져 와서 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
도움이 되었습니까?

해결책

모든 값을 문자열 목록에 넣은 다음 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() )

다른 팁

아마도 페이지에 대한 참조 (이름, 경로 또는 다른 고유 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