Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Для администрирования пользователей продолжим работу с проектом из прошлой темы и добавим в папку Controllers новый контроллер UsersController:
using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Identity; using CustomIdentityApp.Models; using CustomIdentityApp.ViewModels; namespace CustomIdentityApp.Controllers { public class UsersController : Controller { UserManager<User> _userManager; public UsersController(UserManager<User> userManager) { _userManager = userManager; } public IActionResult Index() => View(_userManager.Users.ToList()); public IActionResult Create() => View(); [HttpPost] public async Task<IActionResult> Create(CreateUserViewModel model) { if (ModelState.IsValid) { User user = new User { Email = model.Email, UserName = model.Email, Year = model.Year }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { return RedirectToAction("Index"); } else { foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } } return View(model); } public async Task<IActionResult> Edit(string id) { User user = await _userManager.FindByIdAsync(id); if (user == null) { return NotFound(); } EditUserViewModel model = new EditUserViewModel {Id = user.Id, Email = user.Email, Year = user.Year }; return View(model); } [HttpPost] public async Task<IActionResult> Edit(EditUserViewModel model) { if (ModelState.IsValid) { User user = await _userManager.FindByIdAsync(model.Id); if(user!=null) { user.Email = model.Email; user.UserName = model.Email; user.Year = model.Year; var result = await _userManager.UpdateAsync(user); if (result.Succeeded) { return RedirectToAction("Index"); } else { foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } } } return View(model); } [HttpPost] public async Task<ActionResult> Delete(string id) { User user = await _userManager.FindByIdAsync(id); if (user != null) { IdentityResult result = await _userManager.DeleteAsync(user); } return RedirectToAction("Index"); } } }
Вся работа с пользователями производится с помощью ранее рассмотренных методов класса UserManager.
Для методов Create и Edit в папке ViewModels создадим дополнительные модели представлений:
public class CreateUserViewModel { public string Email { get; set; } public string Password { get; set; } public int Year { get; set; } } public class EditUserViewModel { public string Id { get; set; } public string Email { get; set; } public int Year { get; set; } }
А в папку Views добавим подкаталог Users для представлений контроллера. Далее определим в ней представление Index.cshtml для вывода пользователей:
@model IEnumerable<CustomIdentityApp.Models.User> @{ ViewBag.Title = "Список пользователей"; } <a asp-action="Create">Добавить пользователя</a> <table class="table"> <tr><th>Email</th><th>Год</th><th></th></tr> @foreach (var user in Model) { <tr> <td>@user.Email</td> <td>@user.Year</td> <td> <form asp-action="Delete" asp-route-id="@user.Id" method="post"> <a class="btn btn-sm btn-primary" asp-action="Edit" asp-route-id="@user.Id">Изменить</a> <button type="submit" class="btn btn-sm btn-danger"> Удалить </button> </form> </td> </tr> } </table>
Также добавим представление Create.cshtml для создания новых пользователей:
@model CustomIdentityApp.ViewModels.CreateUserViewModel @{ ViewBag.Title = "Добавление пользователя"; } <form asp-action="Create" asp-controller="Users"> <div asp-validation-summary="All" class="text-danger"></div> <div class="form-group"> <label asp-for="Email" class="control-label">Email</label> <input type="text" asp-for="Email" class="form-control" /> </div> <div class="form-group"> <label asp-for="Password" class="control-label">Пароль</label> <input type="password" asp-for="Password" class="form-control" /> </div> <div class="form-group"> <label asp-for="Year" class="control-label">Год рождения</label> <input type="number" asp-for="Year" class="form-control" /> </div> <div class="form-group"> <input type="submit" value="Добавить" class="btn btn-outline-secondary" /> </div> </form>
И также добавим представление Edit.cshtml для редактирования пользователей:
@model CustomIdentityApp.ViewModels.EditUserViewModel @{ ViewBag.Title = "Редактирование пользователя"; } <form asp-action="Edit" asp-controller="Users"> <div asp-validation-summary="All" class="text-danger"></div> <div class="form-group"> <input type="hidden" asp-for="Id" /> </div> <div class="form-group"> <label asp-for="Email" class="control-label">Email</label> <input type="text" asp-for="Email" class="form-control" /> </div> <div class="form-group"> <label asp-for="Year" class="control-label">Год рождения</label> <input type="number" asp-for="Year" class="form-control" /> </div> <div class="form-group"> <input type="submit" value="Сохранить" class="btn btn-outline-secondary" /> </div> </form>
В итоге проект изменится следующим образом:
В теперь при обращении к методу Index контроллера Users мы сможем увидеть список пользователей, отредактировать, удалить или добавить новых пользователей: