【发布时间】:2019-08-24 20:58:50
【问题描述】:
我用 Razor Pages 搭建了我的用户模型,并在创建页面上我想在联结表 UserRoles 上插入用户角色。
这是我的模特
[Table("Users")]
public class User
{
public User()
{
IsActivo = true;
}
public int Id { get; set; }
[Required]
[Display(Prompt = "Username")]
public string Username { get; set; }
[Display(Name = "Último Acesso")]
public DateTime? DataSessao { get; set; }
[Display(Name = "Activo")]
public bool IsActivo { get; set; }
public Colaborador Colaborador { get; set; }
public ICollection<UserRoles> UserRoles { get; set; }
}
这是创建模型
public class CreateModel : PageModel
{
private readonly HutIS.Models.HutISContext _context;
public CreateModel(HutISContext context)
{
_context = context;
}
public IActionResult OnGet()
{
DepartamentosOptions = _context.Departamento.Select(d =>
new SelectListItem
{
Value = d.Id.ToString(),
Text = d.Nome
}).ToList();
RolesOptions = _context.Roles.Select(d =>
new SelectListItem
{
Value = d.Id.ToString(),
Text = d.Type
}).ToList();
return Page();
}
[BindProperty]
public User User { get; set; }
public List<SelectListItem> DepartamentosOptions { get; set; }
public List<SelectListItem> RolesOptions { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.User.Add(User);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
}
在 html 上
<div class="form-group">
<label asp-for="User.UserRoles" class="control-label"></label>
<select asp-for="User.UserRoles" asp-items="Model.RolesOptions" class="form-control form-control-sm">
<option value="">Selecione um Departamento...</option>
</select>
<span asp-validation-for="User.UserRoles" class="text-danger"></span>
</div>
我不确定我该怎么做,当然我在这里遇到了一个异常,但是如果它是 User 中的一个集合,我该如何绑定 UserRoles 呢?
编辑
我解决了异常问题,它与模型属性有关。现在的问题是 UserRoles 表上没有插入任何内容,我不太确定这样做的方法是什么,因为与 Departments 不同,它的 User 没有 UserRoles 的导航属性。
你可以看到关系是正确的
【问题讨论】:
-
您面临的问题/异常是什么?
-
更新帖子,异常已解决但没有插入任何内容
-
似乎在前端您应该将现有用户角色分配给用户,可能创建新用户角色的逻辑在哪里?
-
它在不同的页面中,模型角色是使用 razor CRUD 搭建的。我知道我可以单独执行此操作,但我认为可以在创建用户时为用户分配角色。已创建角色。
-
我编辑了这个问题以反映这确实是一个 EF Core 问题而不是 ASP.Net。您需要明确更新角色关系,这不会免费发生。请参阅docs.microsoft.com/en-us/ef/core/saving/related-data 了解更多信息
标签: c# asp.net-core razor-pages ef-core-2.0