以下のように、別のクラスとの関係を持つモデル クラスがあります。
public class Client
{
public int ID { get; set; }
[StringLength(30, ErrorMessage = "Client name cannot be longer than 30 characters.")]
public string Name { get; set; }
public virtual Industry Industry { get; set; }
[Display(Name="Head Office")]
public string HeadOffice { get; set; }
}
public class Industry
{
public int ID { get; set; }
[StringLength(30, ErrorMessage = "Industry name cannot be longer than 30 characters.")]
[Display(Name="Industry")]
public string Name { get; set; }
}
最終的な目標は、クライアント CRUD ビューで Industry.Name を選択したり、編集/作成時にそれを割り当てたりできるようにすることです。
コントローラーで以下を使用して、ドロップダウンリストのデータを選択できました。
private void PopulateIndustriesDropDownList(object selectedIndustry = null)
{
var industriesQuery = from i in _context.Industry
orderby i.Name
select i.Name;
ViewBag.Industries = new SelectList(industriesQuery, "Industry", "Name", selectedIndustry);
}
そして、各コントローラー関数に次のものがあります。
// GET: Clients/Create
public IActionResult Create()
{
PopulateIndustriesDropDownList();
return View();
}
// POST: Clients/Create
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Client client)
{
if (ModelState.IsValid)
{
_context.Client.Add(client);
_context.SaveChanges();
return RedirectToAction("Index");
}
PopulateIndustriesDropDownList();
return View(client);
}
すべてが正常に機能しているように見えますが、これを自分のビューにバインドする方法がわかりません。タグ ヘルパーを使用するのはこれが初めてで、構文が正しくないと確信しています。
<div class="form-group">
<label asp-for="Industry.Name" class="col-md-2 control-label"></label>
<div class="col-md-10">
<select asp-for="Industry.ID" asp-items="ViewBag.Industries" class="form-control"></select>
</div>
</div>
Edit 関数を呼び出すと、エラーは発生しませんが、ドロップダウン リストには何も入力されません。
誰かが私が間違っているところを指摘できますか?