如何将ID从SelectList保存到另一个表的字段中?

时间:2019-06-04 19:59:43

标签: asp.net-core razor entity-framework-6 razor-pages

我有两个表,“用户”和“角色”,每个用户都分配了一个角色。使用剃刀页面,我可以创建一个新用户,并从“角色”表填充的下拉列表中选择他们的角色。当我尝试保存新用户时,我正在“角色”表中创建一个新角色,并且新角色ID被保存在“用户”表中。

角色类别:

public class Role
{
    [Display(Name="Role ID")]
    public int RoleId { get; set; }
    [Display(Name="Role Name")]
    public string name { get; set; }
    [Display(Name="Role Description")]
    public string description { get; set; }
}

销售代表类别:

public class SalesRep
{
    [Display(Name="Sales Rep. ID")]
    public int SalesRepId { get; set; }
    // unnecessary code removed ...
    [Display(Name="Role")]
    public Role role { get; set; }
}

Create.cshtml:

<div class="form-group">
    <label asp-for="SalesRep.role" class="control-label"></label>
    <select asp-for="SalesRep.role" class="form-control" asp-items="@Model.RoleList">
    </select>
</div>

PageModel类:

protected void PopulateRoles() // called from OnGet()
{
    RoleList = new SelectList(_context.Roles, nameof(Role.RoleId), nameof(Role.name));
}

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    _context.SalesReps.Add(SalesRep);
    await _context.SaveChangesAsync();

    return RedirectToPage("./Index");
}

这不是我所需要的,我需要从Roles表中使用RoleID保存新用户,而不要创建新用户。

1 个答案:

答案 0 :(得分:0)

由于您使用<select asp-for="SalesRep.role",因此Salesrep.role的类型与下拉列表的value(RoleId)类型不对应。

如果您使用关系,则需要为Role模型中的SalesRep导航属性添加外键(按惯例是roleId)

public class SalesRep
{
    [Display(Name = "Sales Rep. ID")]
    public int SalesRepId { get; set; }

    public string Name { get; set; }

    // unnecessary code removed ...

    public int roleId { get; set; }

    [Display(Name = "Role")]
    [ForeignKey("roleId")]
    public Role role { get; set; }
}

页面

<div class="form-group">
            <label asp-for="SalesRep.role" class="control-label"></label>
            <select asp-for="SalesRep.roleId" class="form-control" asp-items="@Model.RoleList"></select>
</div>

记住要应用迁移并更新数据库。 请参阅EF Core Relationships