Faceboxlist в String, сохранить в базу данных, затем преобразовать в массив

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

  •  19-09-2019
  •  | 
  •  

Вопрос

Я знаю, что этот предмет может быть немного странным, но я не был уверен, как точно описать свою цель

Я пытаюсь выполнить некоторые разрешения на основе ролей в системе управления контентом. Лучший способ, которым я могу придумать, - это вывести список ролей из базы данных и поместить их в флажок. Оттуда я сохраняю разделенную запятую строку зарегистрированных значений в детали страницы базы данных. Наконец, когда страница подтянута обратно, я проверяю, имеет ли текущий пользователь разрешение, стянув отделенную запятую строку и разделяя ее на string () и зацикливаться на значениях.

У меня есть беспокойство, что когда я прохожу через флажок и конвертирую значения в строку, метод цикла добавляет запятую к концу строки ... затем мне приходится лишить запятую, прежде чем сохранить его в базу данных.

У меня вопрос: есть ли лучший способ сделать это, чтобы мне не приходилось возвращаться в струну и лишать запятую перед сбережением?

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

Другие советы

Не могли бы вы просто иметь таблицу базы данных, которая содержит ссылку на страницу (будь то по имени, пути или какой -либо другой уникальный идентификатор), и ссылка на роль?

Я, конечно, не говорю, что это лучшее решение (каким -либо образом), это просто пример:

Таблица ролей:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator

Таблица страницы:

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

Таблица PageRole:

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

Затем вы будете хранить свои данные в таблице соединения и при доступе к странице возвращают свои роли на основе текущей страницы. Конечно, это вообще не должно основываться на странице, вы могли бы так же легко заменить страницу в моем примере с разрешения.

Если вы используете членство ASP.NET, вы можете назначить несколько ролей пользователю.

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

Просто что -то, чтобы рассмотреть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top