2013-07-18 3 views
0

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

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

+0

Я сделал с контрольными элементами Kendo, такими как KendoListView. Это предпочтительнее для вас? –

ответ

0

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

Модель:

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; } 
    } 
} 

Контроллер:

нагрузки CheckBox Значение:

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> 
     } 

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

+0

У меня есть два CheckBoxList в одной форме. Когда вы выбираете элемент в первом CheckBoxList (категории), необходимо изменить второй CheckBoxList. – Ateist