نموذج بيانات إعادة النشر الموديل إلى وحدة تحكم Action Parameter من قائمة نوع

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

سؤال

لدي عرض نوع قوي من النوع

List<List<MyViewModelClass>>

ستكون القائمة الخارجية دائما قوائم List<MyViewModelClass>. وبعد لكل من القوائم الخارجية التي أريد عرض مجموعة من خانات الاختيار. يمكن أن يكون لكل مجموعة عددا تعسفيا من الخيارات.

تبدو فئة الرؤية النموذجية مشابهة لهذا:

public class MyViewModelClass
{
    public Area Area { get; set; }

    public bool IsGeneric { get; set; }

    public string Code { get; set; }

    public bool IsChecked { get; set; }
}

لذلك سوف النظرة النهائية تبدو مثل:


يرجى اختيار تلك التي تنطبق:

المجموعة الأولى من الخيارات:

  • عاشر الخيار 1
  • عاشر الخيار 2
  • عاشر الخيار 3.
  • إلخ.

المجموعة الثانية من الخيارات:

  • عاشر الخيار الثاني 1.
  • عاشر الخيار الثاني 2.
  • عاشر الخيار الثاني 3.
  • عاشر الخيار الثاني 4.
  • إلخ.

يجب عرض مربعات الاختيار MyViewModelClass.Area.Name, ، وينبغي أن تكون قيمتها مرتبطة MyViewModelClass.Area.Id. وبعد حالة فحصها هي بالطبع مرتبط MyViewModel.IsChecked.

سؤال

وأتساءل كيف يمكنني استخدام Html.CheckBox() أو Html.CheckBoxFor() مساعد لعرض خانات الاختيار الخاصة بي؟ يجب أن أحصل على هذه القيم مرة أخرى إلى الخادم على إعادة النشر بالطبع.

أرغب في الحصول على عمل جهاز التحكم الخاص بي مثل أحد هذه:

public ActionResult ConsumeSelections(List<List<MyViewModelClass>> data)
{
    // process data
}

public ActionResult ConsumeSelections(List<MyViewModelClass> first, List<MyViewModelClass> second)
{
    // process data
}

إذا كان الأمر يجعل الأمور أكثر بساطة، فيمكنني إنشاء نوع نموذج عرض منفصل مثل:

public class Options
{
    public List<MyViewModelClass> First { get; set; }

    public List<MyViewModelClass> Second { get; set; }
}

بالإضافة إلى تغيير نسختي الأولى من إجراءات تحكم إلى:

public ActionResult ConsumeSelections(Options data)
{
    // process data
}
هل كانت مفيدة؟

المحلول 2

المحلول

اتضح أن هذا غير معقد للغاية على الإطلاق. كل ما عليك فعله هو اسم عناصر التحكم الخاصة بك بشكل مناسب وسيتم ربط كل شيء معا كما يجب أن يكون. وبالتالي. مهما كانت عناصر التحكم الخاصة بك، يجب دائما اسمها مثل:

name="first[0].propName"
name="first[1].propName"
name="first[2].propName"
name="first[3].propName"
...

// or
name="first[0].data[0].property"
name="first[0].data[1].property"
name="first[0].data[2].property"
...
name="first[1].data[0].property"
name="first[1].data[1].property"
...

كل هذه سوف تحصل على ملزمة List<SomeType> first المعلمة إجراء التحكم (المرء الثاني لديه مجموعة أخرى داخل المجموعة).

ملاحظة مهمة جدا
إذا قمت بإضافة / إزالة عنصر تحكم هذه العناصر بشكل حيوي باستخدام JavaScript، فعليك التأكد من أن الفهارس غير متتالية بدءا من 0، وليس لها أي فجوات. وسوف يكون لديك تطبيق عمل لطيف مع عدد ديناميكي من العناصر في المجموعة.

يمكنك أن تقرأ عن ذلك في بلدي بلوق البريد كذلك.

نصائح أخرى

عموما أقوم بإنشاء نوع (طراز) أن "الطرز" الرأي الذي أريد إنشاءه. بمعنى آخر

public class FooViewModel
{
    public List<Option> General { get; set; }
    public List<Option> Others { get; set; }

    //Some Methods and other properties
}
public FooController :...
{
    private FooViewModel fooViewModel = new FooViewModel();
}

تحرير: إلقاء نظرة على هذا المشنور, ، لأنها بالضبط ما تريد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top