CheckBoxLList إلى String، حفظ إلى قاعدة البيانات، ثم تحويل إلى صفيف

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 لتسلسلها. لن أتعلق على إبقاء قائمة مفصولة بفواصل بدلا من علاقة واحدة من المستخدمين إلى الأدوار. :-)

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