【发布时间】:2019-12-23 14:29:24
【问题描述】:
在Create 方法中,我有一个字段将参数AssignedTo 传递给作为AspNetUsers 表的外键的数据库列。我将用户名列表存储在 Viewbag 中,使它们在 DropDownList 中全部可见。
public IActionResult Create()
{
ViewBag.Users = userManager.Users.Select(u => u.UserName).ToList();
return View();
}
在视图中,代码如下:
<div class="form-group">
<label asp-for="AssignedTo"></label>
@Html.DropDownList("YourDropDownList", new SelectList(ViewBag.Users))
<select asp-items="@new SelectList(ViewBag.Users)" asp-for="AssignedTo"></select>
</div>
这里的问题是我的AssignedTo 获取了 AspNetUser UserName 的值。根据过去问题的建议,我将选择构造函数更改为 new SelectList(Viewbag.Users, nameof(AppUser.Id), nameof(AppUser.UserName)) 但这并不好,因为它返回:
NullReferenceException:对象引用未设置为对象的实例。
这可能是因为我用于此视图的模型不包含AppUser?我该如何解决这个问题?
【问题讨论】:
-
首先,始终使用专用的视图模型类,然后使用
Html.DropDownListFor(而不是DropDownList)来引用视图模型的属性。并且不要使用实体类型作为根视图模型。而且从不使用ViewBag,因为它不是强类型的。 -
不要将 HTML 助手与标签助手混用。您当前的 cshtml 将呈现两个单独的
<select>元素。 -
老实说 - 完全避免
SelectList,IMO。 -
好的!谢谢你的建议。我将尝试对其进行整理,并最终返回有关其工作原理的更新。
标签: c# html asp.net-core