我有两个表,“用户”和“角色”,每个用户都分配了一个角色。使用剃刀页面,我可以创建一个新用户,并从“角色”表填充的下拉列表中选择他们的角色。当我尝试保存新用户时,我正在“角色”表中创建一个新角色,并且新角色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保存新用户,而不要创建新用户。
答案 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