ViewData

  • حل مشكلة ظهور ‘System.Web.Mvc.SelectListItem’ في DropDownList بلغة C#

    في هذا السياق، يظهر لك نص “System.Web.Mvc.SelectListItem” في قائمة الاسقاط الخاصة بك بدلاً من النص المتوقع، وهذا يمكن أن يكون ناتجًا عن عدة عوامل. لنقم بفحص الشيفرة لفهم الوضع بشكل أفضل.

    أولاً وقبل كل شيء، يبدو أن مشكلتك قد تنبع من كيفية تعبئة النصوص لـ SelectListItem في النموذج الخاص بك. في نموذجك Licenses، يوجد خاصية LicenseNames من نوع SelectList، ولكنها لا تحتوي على قائمة فعلية من العناصر. بدلاً من ذلك، يتم تعبئتها باستخدام SelectList في العملية الخاصة بك في الوحدة التحكم.

    لتصحيح هذا، يمكنك تعبئة LicenseNames بقائمة فعلية من SelectListItem في نموذجك بدلاً من استخدام SelectList. يمكنك فعل ذلك بتعديل نموذجك كما يلي:

    csharp
    public class Licenses { public List LicenseNames { get; set; } public string SelectedLicenseName { get; set; } }

    ومن ثم في الوحدة التحكم، يمكنك تعبئة هذه القائمة في الطريقة التالية:

    csharp
    model.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”.

  • ViewBag و ViewData الفرق بين ال

    ما هو الفرق بين ViewBag و ال ViewData

    من أجل تمرير البيانات من الكنترولر  للعرض في subsequent request  التالي ،و  يوفر فريم ASP.NET MVC خيارات مختلفة منها :

    1- عرض البيانات (ViewData)
    2- حقيبة عرض (ViewBag)
    3- TempData

    نتيجة بحث الصور عن ‪difference between ViewBag and ViewData‬‏

    تستخدم ViewBag و ViewData للتواصل بين controller  وcorresponding view . ولكن هذا الاتصال هو فقط لمكالمة السيرفر ، فإنه يصبح لاغيا إذا حدث إعادة توجيه. باختصار ، فإنه آلية للحفاظ على الحالة بين controller  وال corresponding view.

    ViewData هو dictionary object  بينما ViewBag هي خاصية ديناميكية (ميزة C # 4.0 جديدة). يمكن الوصول إلى DisplayView كونه dictionary object باستخدام strings كمفاتيح ويتطلب أيضًا typecasting للأنواع المعقدة. من جهة إخرى  ، لا يحتوي تطبيق ViewBag على typecasting وعمليات فحص فارغة.

    TempData هو أيضا dictionary object الذي يبقى لوقت طلب HTTP. لذلك ، يمكن استخدام Tempdata للحفاظ على البيانات بين عمليات إعادة التوجيه ، أي من controller  إلى controller  أخر .

     بالعامية :

    ١- نفس الشيء لكن طريقة الاستدعاء تختلف بينهما

    ٢- أحدهما key value pairs و الأخرى dynamic object properties


    وحدة بتخزن فيها
    key value و الثانية object يعني ال data المعقدة اكثر منkey value وفيtemp data هاي مؤقتة بتعيش و بتموت مع ال request منيحة ل نقل ال data من controller ل controller

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر