Редактирование и удаление пользователей

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 07.12.2015

Редактирование и удаление пользователей в ASP.NET Identity представляется довольно простой задачей благодаря классу UserManager. Так, возьмем проект из прошлой темы, где у нас уже есть механизм регистрации и логина пользователей. Добавим в контроллер AccountController следующие методы:

[HttpGet]
public ActionResult Delete()
{
    return View();
}

[HttpPost]
[ActionName("Delete")]
public async Task<ActionResult> DeleteConfirmed()
{
    ApplicationUser user = await UserManager.FindByEmailAsync(User.Identity.Name);
    if (user != null)
    {
        IdentityResult result = await UserManager.DeleteAsync(user);
        if (result.Succeeded)
        {
            return RedirectToAction("Logout", "Account");
        }
	}
	return RedirectToAction("Index", "Home");
}

public async Task<ActionResult> Edit()
{
    ApplicationUser user = await UserManager.FindByEmailAsync(User.Identity.Name);
    if (user != null)
    {
        EditModel model = new EditModel { Year = user.Year };
        return View(model);
    }
    return RedirectToAction("Login", "Account");
}

[HttpPost]
public async Task<ActionResult> Edit(EditModel model) 
{
    ApplicationUser user = await UserManager.FindByEmailAsync(User.Identity.Name);
    if (user != null)
    {
        user.Year = model.Year;
        IdentityResult result = await UserManager.UpdateAsync(user);
        if (result.Succeeded)
        {
            return RedirectToAction("Index", "Home");
        }
        else
        {
            ModelState.AddModelError("", "Что-то пошло не так");
        }
    }
    else
    {
        ModelState.AddModelError("", "Пользователь не найден");
    }

    return View(model);
}

Методы Delete и DeleteConfirmed отображают пользователю представление для удаления и принимают выбор пользователя об удалении. Для удаления используется метод UserManager.DeleteAsync(). Он возвращает объект IdentityResult, который позволяет отследить успех операции.

Метод Edit также отображает представление для редактирования, передавая в него модель EditModel, которую мы далее создадим. В данном случае мы редактируем только значение свойства Year. POST-версия метода принимает данные модели и устанавливает значения ее свойств для пользователя. Редактирование также производится одним методом - методом UserManager.UpdateAsync()

Далее создадим модель EditModel:

public class EditModel
{
    public int Year { get; set; }
}

Пусть редактирование будет производиться только для года рождения пользователя.

Представление для удаления могло бы выглядеть так:

@{
    ViewBag.Title = "Delete";
}

<form method="post">
    <h2>Вы уверены, что хотите удалить свой аккаунт?</h2>
    <button type="submit" >Да</button>
</form>

И представление для редактирования:

@model AspNetIdentityApp.Models.EditModel

@{
    ViewBag.Title = "Edit";
}

<h2>Редактировать данные профиля</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div>
        @Html.ValidationSummary(true, "")
        <div>
            <p>Year: @Html.EditorFor(model => model.Year)</p>
        </div>

        <div>
            <div>
                <input type="submit" value="Сохранить" />
            </div>
        </div>
    </div>
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850