Checkboxlist a la Cadena, Guardar en la Base de datos, a Continuación, convertir a la Matriz

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Sé que el tema puede ser un poco extraño, pero yo no estaba seguro de cómo describe exactamente mi objetivo

Estoy tratando de hacer algo de Papel permisos basados en un sistema de gestión de contenidos.La mejor manera que se me ocurre de hacerlo es tirar de la lista de funciones de la base de datos y colocarlos en un CheckBoxList.A partir de ahí, puedo guardar una cadena separada por comas de los valores activados en la página de detalles de la base de datos.Finalmente, cuando la página se retrae hacia arriba, puedo comprobar si el Usuario actual tiene permiso tirando hacia abajo de la cadena separada por comas y división en una Cadena() y loop a través de los valores.

La preocupación que tengo es que cuando me bucle a través de la CheckBoxList y convertir los valores en una cadena, el método loop agrega una coma al final de la cadena...Entonces tengo que tira de la coma antes de guardarlo en la base de datos.

Mi pregunta es, ¿hay una mejor manera de hacer esto así que no tengo que ir de nuevo en la cuerda y tira de la coma final antes de guardar?

    ''# 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
¿Fue útil?

Solución

Poner todos los valores en una lista de cadenas, a continuación, utilizar la Cadena.Únete a concatenar.No voy a comentar en mantener una lista separada por comas en lugar de una relación de uno a muchos relación de los usuarios a los roles.:-)

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

Otros consejos

Podría tal vez simplemente tener una tabla de base de datos que contiene una referencia a la página (ya sea por nombre, ruta, o algún otro identificador único), y una referencia a la función?

Ciertamente no estoy diciendo que esta es la mejor solución (por cualquier medio), es simplemente un ejemplo:

Papel De La Tabla:

RoleId | RoleName
_________________
1      | Editor
2      | Administrator

Tabla De La Página:

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

PageRole Tabla:

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

Entonces usted podría almacenar sus datos en la unión de la tabla, y al acceder a la página tire hacia atrás de su papel en la página actual.Por supuesto, no tiene que basarse en la página, se podría fácilmente reemplazar la Página en mi ejemplo, con Permiso.

Si usted utiliza ASP.NET membresía, usted puede asignar varios roles a un usuario.

Roles.AddUserToRoles(username, roles);

Roles.IsUserInRole(role);

Sólo es algo a tener en cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top