0

モデルは、製品のデータベース リストからそのカテゴリを選択します。フォームで、カテゴリのリストを含む CheckBoxList と、この 1 つ (または複数の) カテゴリのアイテムのリストを含む別の 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 に答える