0

模型从产品的数据库列表中选择它们的类别。在表单上,​​您要显示带有类别列表的 CheckBoxList 和带有此一个(或多个)类别中的项目列表的另一个。选择要更新的产品类别列表后立即。如何实施?

提前致谢。

4

1 回答 1

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

控制器:

加载复选框值:

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" value=@item.Text" 
             @foreach (var c in Model.CategoryIds)
             {
               if(c == item.Value)
               {
                  <text> checked="checked"</text>
               }
             }
             <label for="optionId">@item.Text></label>
        }

如果这对您没有帮助,请告诉我。

于 2013-07-18T06:56:48.880 回答