首页 > 解决方案 > 使用 SelectList 从 DropDownList 中获取 AspNetUsers 的 ID

问题描述

在一种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吗?我该如何解决这个问题?

标签: c#htmlasp.net-core

解决方案


要从 DropDownList 获取 AspNetUsers 的 Id,您可以使用 ViewBag,如​​下所示:

public IActionResult CreateTask()
{
    ViewBag.Users = new SelectList(_userManager.Users, nameof(AppUser.Id), nameof(AppUser.UserName));
    return View();
}

任务模型:

public class TaskModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string AssignedTo { get; set; }

    //other properties
}

并且在视图中

<div class="form-group">
    <label asp-for="AssignedTo"></label>
    <select asp-for="AssignedTo" asp-items="@ViewBag.Users"></select>
</div>

您可以参考此处了解如何填充 Select 标签助手。


推荐阅读