حل مشكلة ظهور ‘System.Web.Mvc.SelectListItem’ في DropDownList بلغة C#
في هذا السياق، يظهر لك نص “System.Web.Mvc.SelectListItem” في قائمة الاسقاط الخاصة بك بدلاً من النص المتوقع، وهذا يمكن أن يكون ناتجًا عن عدة عوامل. لنقم بفحص الشيفرة لفهم الوضع بشكل أفضل.
أولاً وقبل كل شيء، يبدو أن مشكلتك قد تنبع من كيفية تعبئة النصوص لـ SelectListItem في النموذج الخاص بك. في نموذجك Licenses
، يوجد خاصية LicenseNames
من نوع SelectList
، ولكنها لا تحتوي على قائمة فعلية من العناصر. بدلاً من ذلك، يتم تعبئتها باستخدام SelectList
في العملية الخاصة بك في الوحدة التحكم.
-
إضافة فراغات بيضاء في C#11/04/2024
-
استخراج أطول فقرة خالية من الأرقام في C#25/02/2024
لتصحيح هذا، يمكنك تعبئة LicenseNames
بقائمة فعلية من SelectListItem
في نموذجك بدلاً من استخدام SelectList
. يمكنك فعل ذلك بتعديل نموذجك كما يلي:
csharppublic class Licenses
{
public List LicenseNames { get; set; }
public string SelectedLicenseName { get; set; }
}
ومن ثم في الوحدة التحكم، يمكنك تعبئة هذه القائمة في الطريقة التالية:
csharpmodel.LicenseNames = LicsTable.AsEnumerable().Select(row => new SelectListItem
{
Value = row["Description"].ToString(),
Text = "test"
}).ToList();
بهذه الطريقة، ستحتوي LicenseNames
على قائمة فعلية من SelectListItem
، وبالتالي يجب عرض النصوص الصحيحة في قائمة الاسقاط الخاصة بك.
علاوة على ذلك، يجب التأكد من أن النموذج الجزئي الذي يتم عرضه ("_AddLicense"
في حالتك) يستخدم النموذج الصحيح ويتم نقل البيانات بشكل صحيح.
يرجى تجربة هذه الإصلاحات والتحقق مما إذا كانت تحل المشكلة الخاصة بك.
المزيد من المعلومات
بالطبع، سأوسع في شرح المزيد من المعلومات لفهم الوضع بشكل أفضل.
أولاً، يجب أن نلقي نظرة عن كثب على الشيفرة الخاصة بوحدة التحكم الخاصة بك. في الوحدة التحكم، قمت باستخدام SelectList
لتعبئة LicenseNames
، وهذا قد يؤدي إلى تضمين القيم الإضافية غير المتوقعة في القائمة المنسدلة.
بعد تغيير نوع LicenseNames
إلى List
، يمكنك أيضًا التحقق من طريقة عرض البيانات في العرض الجزئي "_AddLicense"
لضمان أنه يستخدم النموذج الصحيح ويعرض البيانات بشكل صحيح.
على سبيل المثال، يمكن أن يكون لديك شيفرة في العرض تشبه هذه:
csharp@model ProfessionalActivities.Models.Licenses
@Html.DropDownListFor(model => model.SelectedLicenseName, Model.LicenseNames, "-- اختر الترخيص --", new { @class = "form-control focusMe" })
هذا الكود يستخدم DropDownListFor
لعرض البيانات من LicenseNames
، ويأخذ في اعتباره القيمة المحددة SelectedLicenseName
. يمكنك أيضًا استخدام DropDownList
بدلاً من DropDownListFor
إذا لم تحتاج إلى ربط صارم بنموذجك.
تأكد أيضًا من أن لديك السمة Value
في SelectListItem
تحتوي على القيمة الصحيحة (في هذه الحالة، قيمة row["Description"].ToString()
).
باستخدام هذه الإصلاحات، يجب أن تكون قادرًا على عرض النصوص بشكل صحيح في قائمة الاسقاط الخاصة بك دون ظهور “System.Web.Mvc.SelectListItem”.