ASP.Net Core 5 MVC 使用数据库记录填充下拉列表
ASP.Net Core 5 MVC Populate a drop down list with Database records
标题说明了我要做什么。
控制器方法:
public IActionResult Create()
{
IEnumerable<string> hList = from char s in _context.NR_Users select s.ToString();
List < NR_User > hUsers = new List<NR_User>();
hUsers = (from c in _context.NR_Users select c).ToList();
hUsers.Insert(0, new NR_User { ID = 0, Name = "Select" });
ViewBag.historyUsers = hUsers;
List<SelectListItem> options = new()
{
new SelectListItem { Value = "True", Text = "Yes" },
new SelectListItem { Value = "False", Text = "No" }
};
ViewBag.options = options;
return View();
}
查看:
<div class="form-group col-md-4">
<label class="control-label">History PM</label>
<select asp-for="History_PM" name="History_PM" class="form-control" asp-items="@ViewBag.historyUsers"></select>
<span asp-validation-for="History_PM" class="text-danger"></span>
</div>
但是当我 运行 应用程序并导航到“创建”页面时,我收到此错误:
RuntimeBinderException: Cannot implicitly convert type 'System.Collections.Generic.List<EnvApp.Models.DB.NR_User>' to 'System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>'. An explicit conversion exists (are you missing a cast?)
我知道它不能将列表隐式转换为 IEnumerable,但我该怎么做呢?
您可以使用 SelectList class.
转换列表
尝试更换
<select asp-for="History_PM" name="History_PM" class="form-control" asp-items="@ViewBag.historyUsers"></select>
与
<select asp-for="History_PM" name="History_PM" class="form-control" asp-items="@(new SelectList(ViewBag.historyUsers, "ID", "Name"))"></select>
标题说明了我要做什么。
控制器方法:
public IActionResult Create()
{
IEnumerable<string> hList = from char s in _context.NR_Users select s.ToString();
List < NR_User > hUsers = new List<NR_User>();
hUsers = (from c in _context.NR_Users select c).ToList();
hUsers.Insert(0, new NR_User { ID = 0, Name = "Select" });
ViewBag.historyUsers = hUsers;
List<SelectListItem> options = new()
{
new SelectListItem { Value = "True", Text = "Yes" },
new SelectListItem { Value = "False", Text = "No" }
};
ViewBag.options = options;
return View();
}
查看:
<div class="form-group col-md-4">
<label class="control-label">History PM</label>
<select asp-for="History_PM" name="History_PM" class="form-control" asp-items="@ViewBag.historyUsers"></select>
<span asp-validation-for="History_PM" class="text-danger"></span>
</div>
但是当我 运行 应用程序并导航到“创建”页面时,我收到此错误:
RuntimeBinderException: Cannot implicitly convert type 'System.Collections.Generic.List<EnvApp.Models.DB.NR_User>' to 'System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>'. An explicit conversion exists (are you missing a cast?)
我知道它不能将列表隐式转换为 IEnumerable,但我该怎么做呢?
您可以使用 SelectList class.
转换列表尝试更换
<select asp-for="History_PM" name="History_PM" class="form-control" asp-items="@ViewBag.historyUsers"></select>
与
<select asp-for="History_PM" name="History_PM" class="form-control" asp-items="@(new SelectList(ViewBag.historyUsers, "ID", "Name"))"></select>