我有一个与另一个有关系的模型类,如下所示:
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);
}
一切似乎都运转正常,但我无法弄清楚如何在我的视图中绑定它。这是我第一次使用Tag Helpers,我确信我的语法不正确。
<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>
调用编辑功能时,我没有收到错误,但下拉列表没有填充任何内容。
任何人都可以指出我哪里出错了吗?
答案 0 :(得分:0)
据我所知(虽然我不确定)你应该把asp-items =“@ ViewBag.Industries”而不是asp-items =“ViewBag.Industries”。 我相信你在这里有详细的解释: Select Tag Helper in ASP.NET Core MVC
答案 1 :(得分:0)
我认为select标签助手需要IEnumerable<SelectListItem>
将PopulateIndustriesDropDownList方法重构为
ViewBag.Industries = new SelectList(industriesQuery, "Industry", "Name", selectedIndustry).Items;
或在视图中进行演员表,