CheckBoxLList إلى String، حفظ إلى قاعدة البيانات، ثم تحويل إلى صفيف
-
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);
مجرد شيء للنظر فيه.