Я пытался создавать пользователей, назначая им роли. Свойство role находится в поле User as Required. Дело в том, что когда я сделал тег для извлечения данных из таблицы ролей, чтобы иметь возможность установить роль для пользователя, запрос вставки не работает. Таблица User имеет атрибут "roleId", но класс User имеет свойство "role" из класса Role.
Я добавлю код страницы бритвы UserCreate вместе с моделью, которую я использовал.
UserCreate.cs html:
@page
@model SprintOneBack.UserCreateModel
@{
ViewData["Title"] = "UserCreate";
}
<h1>Create</h1>
<h4>User</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="User.Nom" class="control-label"></label>
<input asp-for="User.Nom" class="form-control" />
<span asp-validation-for="User.Nom" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="User.Email" class="control-label"></label>
<input asp-for="User.Email" class="form-control" />
<span asp-validation-for="User.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="User.password" class="control-label"></label>
<input asp-for="User.password" class="form-control" />
<span asp-validation-for="User.password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="User.role" class="control-label"></label>
<select asp-for="User.role" class="form-control" asp-items="@(new SelectList(Model.displayRoles, "Id", "Label"))">
<option value="" selected disabled>-- select Role --</option>
</select>
@*<input asp-for="User.role.Label" class="form-control" />*@
<span asp-validation-for="User.role" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-page="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
UserCreateModel.cs html .cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using SprintOneBack.Model;
namespace SprintOneBack
{
public class UserCreateModel : PageModel
{
private readonly ApplicationDbContext _context;
public UserCreateModel(ApplicationDbContext context)
{
_context = context;
displayRoles = _context.Role.ToList();
}
public IActionResult OnGet()
{
return Page();
}
public IEnumerable<Role> displayRoles { get; set; }
public async Task OnGetRoles()
{
displayRoles = await _context.Role.ToListAsync();
}
[BindProperty]
public User User { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.User.Add(User);
await _context.SaveChangesAsync();
return RedirectToPage("./UserIndex");
}
}
}
Класс пользователя:
public class User
{
[Key]
public int Id { get; set; }
[Required]
public string Nom { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string password { get; set; }
[Required]
public Role role { get; set; }
}
Класс роли:
public class Role
{
[Key]
public int Id { get; set; }
[Required]
public string Label { get; set; }
}
Таблица пользователей вместе с таблицей ролей: ![enter image description here](https://i.stack.imgur.com/edgKe.png)