如何将 ID 从 SelectList 保存到另一个 table 的字段?
How do I save the ID from a SelectList to the field of another table?
我有两个 table,用户和角色,每个用户都分配了一个角色。使用 Razor Pages,我可以创建一个新用户,并且 select 从角色 table 填充的下拉列表中他们的角色。当我尝试保存新用户时,我在角色 table 中创建了一个新角色,新角色 ID 保存在用户 table 中。
角色Class:
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; }
}
销售代表Class:
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>
页面模型Class:
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");
}
这不是我需要的,我需要使用角色 table 中的 RoleID 保存新用户,而不是创建新用户。
由于您使用<select asp-for="SalesRep.role"
,Salesrep.role
的类型与下拉列表的值(RoleId)类型不对应。
如果您正在使用关系,则需要在 SalesRep
模型
中为您的 Role
导航 属性 添加一个外键(按照约定的 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
我有两个 table,用户和角色,每个用户都分配了一个角色。使用 Razor Pages,我可以创建一个新用户,并且 select 从角色 table 填充的下拉列表中他们的角色。当我尝试保存新用户时,我在角色 table 中创建了一个新角色,新角色 ID 保存在用户 table 中。
角色Class:
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; }
}
销售代表Class:
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>
页面模型Class:
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");
}
这不是我需要的,我需要使用角色 table 中的 RoleID 保存新用户,而不是创建新用户。
由于您使用<select asp-for="SalesRep.role"
,Salesrep.role
的类型与下拉列表的值(RoleId)类型不对应。
如果您正在使用关系,则需要在 SalesRep
模型
Role
导航 属性 添加一个外键(按照约定的 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