MVC Передача данных в представление - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь дать delete post возможность пользователю, который вошел в систему, и его / ее ID совпадает с userId в посте. Есть 2 controllers Account, который отвечает за вход в систему пользователя и post controller. При создании новой записи вот как я получаю userId внутри действия создания в контроллере записи:

var user_id = userManager.GetUserId(HttpContext.User);

В разделе сведений о записи есть 2 кнопки Edit и Delete

Я думал использовать if-else, чтобы скрыть кнопки, но я не знаю, как получить доступ к userId

@if (signInManager.IsSignedIn(User) && Model.Item.userId == ??)
{
    <div class="card-footer text-center">
        <a asp-action="edit" asp-controller="home" class="btn btn-primary" asp-route-id="@Model.Item.Id">Edit</a>
        <form method="post" asp-action="DeleteUser" asp-route-id="@Model.Item.Id">
            <button type="submit" class="btn btn-danger">Delete</button>
        </form>
    </div>
}

Должен ли я создать Cookie или я могу использовать UserManager в некотором роде?

1 Ответ

0 голосов
/ 14 февраля 2020

Есть много способов добиться этого, например, вы можете прочитать идентификатор пользователя в контроллере и установить viewbag, чтобы сохранить значение. Или вы можете напрямую получить идентификатор пользователя в бритве:

@using Microsoft.AspNetCore.Identity
@inject UserManager<ApplicationUser> UserManager

@if (signInManager.IsSignedIn(User) && Model.Item.userId == @UserManager.GetUserId(User))

Или:

@using System.Security.Claims;
@if (signInManager.IsSignedIn(User) && Model.Item.userId == @User.FindFirstValue(ClaimTypes.NameIdentifier))
...