Два CheckBoxList

Модель выбирает из базы данных список продуктов по их категориям. На форме вы хотите отобразить CheckBoxList со списком категорий, а другой со списком элементов в этой одной (или нескольких) категории. Сразу после выбора категории список товаров будет обновляться. Как это можно реализовать?

Заранее спасибо.


person Ateist    schedule 18.07.2013    source источник
comment
я закончил с элементами управления Kendo UI, такими как KendoListView. Это предпочтительнее для вас?   -  person Jeet Bhatt    schedule 18.07.2013


Ответы (1)


Я обычно использую нижеприведенный подход при работе с флажками, чтобы проверить, помогает ли он вам.

Модель:

namespace GateApplication.Models
{
    public class Gate
    {
        public string PreprationRequired { get; set; }
        public List<CheckBoxes>  lstPreprationRequired{ get; set; }
        public string[] CategoryIds { get; set; }
    }

    public class CheckBoxes
    {
        public int ID { get; set; }
        public string Value { get; set; }
        public string Text { get; set; }
        public bool Checked { get; set; }
    }
}

Контроллер:

Загрузить значение флажка:

public ActionResult Create()
   {
      List<CheckBoxes> lstchk = new List<CheckBoxes>()
            {
                new CheckBoxes {Text="coduit", Value="coduit" },
                new CheckBoxes {Text="safety", Value="safety" },
                new CheckBoxes {Text="power", Value="power" },
                new CheckBoxes {Text="access", Value="access" }

            };

          var model = new Gate
            {
               lstPreprationRequired=lstchk
            };

            return View(model);
   }

Просмотр:

@foreach (var item in Model.lstPreprationRequired)
    {
        <input type="checkbox" id="@item.Value" name="CategoryIds" value="@item.Text"/>
                  <label for="optionId">@item.Text</label>
       <br />
    }

Теперь ваш вид должен иметь список флажков. Теперь сохраняем значения CheckBox в базу данных.

    [HttpPost]
    public ActionResult Create(Gate ViewModel,FormCollection collection)
    {
        try
        {

            Gate gate = new Gate();

            if (ModelState.IsValid)
            {
                gate.PreprationRequired = Request.Form["CategoryIds"];// here you'll get a string containing a list of checked values of the checkbox list separated by commas

                if (string.IsNullOrEmpty(gate.PreprationRequired))//this is used when no checkbox is checked
                    gate.PreprationRequired = "None,None";

                Save();//Save to database
                return RedirectToAction("Index");
            }
            else
            {
                return View();
            }

        }
        catch
        {
            return View();
        }
    }

Теперь у вас есть строка ниже в вашей базе данных

безопасность, питание, доступ

Теперь выберите выбранные значения и отобразите представление.

public ActionResult Edit(int id)
        {
           List<CheckBoxes> lstchk = new List<CheckBoxes>()
            {
                 new CheckBoxes {Text="coduit", Value="coduit" },
                new CheckBoxes {Text="safety", Value="safety" },
                new CheckBoxes {Text="power", Value="power" },
                new CheckBoxes {Text="access", Value="access" }
             };

            var model = new Gate
            {
                lstPreprationRequired =lstchk,
                CategoryIds = "safety,power,access".Split(',')//here get your comma separated list from database and assign it to the CategoryIds string array, i have used sample text for the values


            };

            return View(model);
        }

Просмотр:

  @foreach (var item in Model.lstPreprationRequired)
        {
             <input type="checkbox" id="@item.Value" name="CategoryIds" [email protected]" 
             @foreach (var c in Model.CategoryIds)
             {
               if(c == item.Value)
               {
                  <text> checked="checked"</text>
               }
             }
             <label for="optionId">@item.Text></label>
        }

Дайте мне знать, если это не поможет вам.

person chamara    schedule 18.07.2013
comment
У меня есть два CheckBoxList в одной форме. При выборе элемента в первом CheckBoxList (категория) должен измениться второй CheckBoxList. - person Ateist; 18.07.2013