Faceboxlist в String, сохранить в базу данных, затем преобразовать в массив
-
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);
Просто что -то, чтобы рассмотреть.