«HttpContextAccessor» не содержит определения «Session» - PullRequest
0 голосов
/ 06 апреля 2020

на мой взгляд

@if(Model.Creator.UserId == Microsoft.AspNetCore.Http.HttpContextAccessor.Session["UserId"])
    {
        <a href="/events/@Model.EventId/edit" class="btn btn-success no-float inline">Edit</a>
        <form method="post" asp-action="Delete" asp-controller="home" asp-route-id="@Model.EventId" class="inline">
            <input type="submit" class="btn btn-danger" value="Delete">
        </form>
    }

В моем контроллере

using Microsoft.AspNetCore.Http;
...    
HttpContext.Session.SetInt32("UserId", UserInDb.UserId);

Сообщение об ошибке находится под сеансом в операторе View IF

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

Вы можете ввести HttpContext в Razor View с помощью следующего кода:

@using Microsoft.AspNetCore.Http

...

@if(Model.Creator.UserId == Context.Session["UserId"])
    {
        <a href="/events/@Model.EventId/edit" class="btn btn-success no-float inline">Edit</a>
        <form method="post" asp-action="Delete" asp-controller="home" asp-route-id="@Model.EventId" class="inline">
            <input type="submit" class="btn btn-danger" value="Delete">
        </form>
    }
0 голосов
/ 07 апреля 2020

В результате я смог получить доступ к сеансу со следующими данными в представлении

@if(Model.Creator.UserId == Context.Session.GetInt32("UserId"))
{
    <a href="/events/@Model.EventId/edit" class="btn btn-success no-float inline">Edit</a>
    <form method="post" asp-action="Delete" asp-controller="home" asp-route-id="@Model.EventId" class="inline">
        <input type="submit" class="btn btn-danger" value="Delete">
    </form>
}
0 голосов
/ 06 апреля 2020

Как говорит компилятор, этот класс не имеет ничего под названием Session. Единственное свойство вокруг HttpContext.

Тип HttpContext, в свою очередь, имеет свойство сеанса. И этот тип свойств имеет индексатор: https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.httpcontext.session

Итак, что вы хотели, было, вероятно,

Microsoft.AspNetCore.Http.HttpContextAccessor.HttpContext.Session["UserId"]
...