ASP Net Веб-формы Core 3.0. Можно ли при работе с Identity добавить функцию удаления для удаления пользователей? - PullRequest
0 голосов
/ 09 мая 2020

Недавно начал изучать ASP Net Core. Я начал с веб-форм Razor Pages. Чтобы перейти к сути, я сделал таблицу, которая подключена к базе данных Identity. Он содержит имя пользователя и адрес электронной почты из таблицы AspNetUsers из базы данных. Все хорошо до сих пор. Я пытаюсь добавить в таблицу функцию удаления, чтобы можно было удалить зарегистрированных пользователей с помощью функции удаления. Я что-то пробовал, но не знаю, где ошибаюсь. Если кто-нибудь может мне помочь, я буду очень рад, так как я уже некоторое время борюсь с этим. Я вставлю код и, может быть, кто-нибудь предупредит меня. Я пытаюсь использовать функцию удаления как OnPost, который будет подключен к таблице с помощью asp -page-handler. Может ли кто-нибудь сказать мне, где я ошибаюсь?

.cs html

  @page
@model ProiectLicenta.Pages.Userlist.IndexModel
@{
    ViewData["Title"] = "UserList";
}

<h1>UserList</h1>

<table class="table">
    <thead>
        <tr>
            <th>
                UserName
            </th>
            <th>
                Email
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @for (var i = 0; i < Model.UserList.Count; i++)
        {
            <tr>
                <td>
                    @Model.UserList[i].UserName
                </td>
                <td>
                    @Model.UserList[i].Email
                </td>
                <td>
                    <a asp-action="Edit" asp-route-id="@Model.UserList[i].Id">Edit</a> |
                    <a asp-action="Details" asp-route-id="@Model.UserList[i].Id">Details</a> |
                    <a asp-page-handler="Del" asp-route-id="@Model.UserList[i].Id">Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>

.cs html .cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;

namespace ProiectLicenta.Pages.Userlist
{

    public class IndexModel : PageModel
    {
        private readonly UserManager<IdentityUser> _userManager;

        public IndexModel(UserManager<IdentityUser> userManager)
        {
            _userManager = userManager;
        }
        public List<IdentityUser> UserList { get; set; }
        public void OnGet()
        {
            UserList = _userManager.Users.ToList();
        }
        public async Task<ActionResult> OnPostDel(string id)
        {
            UserList = _userManager.Users.ToList();
            var User = await _userManager.FindByIdAsync(id);
            if (User != null)
            {
                IdentityResult result = await _userManager.DeleteAsync(User);
            }
            return RedirectToPage("Index");
        }
    }
}

1 Ответ

0 голосов
/ 11 мая 2020
Событие нажатия на тег

<a> отправит запрос Get, поэтому используйте OnGetDel вместо OnPostDel:

public async Task<ActionResult> OnGetDel(string id)
{

    var User = await _userManager.FindByIdAsync(id);
    if (User != null)
    {
        IdentityResult result = await _userManager.DeleteAsync(User);
    }
    return RedirectToPage("Index");
}
...