モデルは、製品のデータベース リストからそのカテゴリを選択します。フォームで、カテゴリのリストを含む CheckBoxList と、この 1 つ (または複数の) カテゴリのアイテムのリストを含む別の CheckBoxList を表示します。更新する製品のカテゴリ リストを選択した直後。これはどのように実装できますか?
前もって感謝します。
モデルは、製品のデータベース リストからそのカテゴリを選択します。フォームで、カテゴリのリストを含む CheckBoxList と、この 1 つ (または複数の) カテゴリのアイテムのリストを含む別の CheckBoxList を表示します。更新する製品のカテゴリ リストを選択した直後。これはどのように実装できますか?
前もって感謝します。
私は通常、チェックボックスを扱うときに以下のアプローチを使用して、それが役立つかどうかを確認します。
モデル:
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>
}
これで問題が解決しない場合はお知らせください。